Я пишу скрипт PHP CLI для клиента, который работает на общем хостинге. Он регистрирует в файл, используя простую функцию, как:Не удалось открыть поток: Слишком много открытых файлов
function log_entry($msg) {
global $log_file, $log_handle;
$msg = "[".date('Y-m-d H:i:s')."] ".$msg."\n";
echo $msg;
$log_handle = fopen($log_file, 'a');
fwrite($log_handle, $msg);
}
И я получаю эту ошибку:
PHP Warning: fopen(./logs/sync.20130410.log)
[<a href='function.fopen'>function.fopen</a>]: failed to open stream:
Too many open files in ./functions.php on line 61
Я думал, что проблема с использованием той же ручкой, так что я изменил его:
function log_entry($msg) {
global $log_file;
$msg = "[".date('Y-m-d H:i:s')."] ".$msg."\n";
echo $msg;
$log_handle = fopen($log_file, 'a');
fwrite($log_handle, $msg);
fclose($log_handle);
}
Но это не сработало. Я всегда получаю ошибку в одной строке журнала. Когда я делаю ulimit -n
, я получаю 1024, но это не должно быть проблемой, потому что я никогда не открываю больше одного файла. Идеи?
Вы, мой бег в лимит дескриптора файла с вашим хостинговым провайдером – Zak
Но разве я не использую только один за раз с обеими функциями? Первый должен использовать только один через полное исполнение, а второй должен использовать один на строку ... или он работает по-другому? – Mauro
http://serverfault.com/questions/195334/apache-crashes-every-night-due-to-too-many-open-files – zod