PHP CLI не будет регистрировать ошибки

В настоящее время PHP не регистрирует ошибки, возникающие из командной строки.

У меня есть :

log_errors = On error_log = /var/log/php_errors.log 

в /etc/php5/cli/php.ini

Я пропустил еще одну настройку, чтобы заставить это работать?

    Убедитесь, что учетная запись пользователя, использующая PHP CLI, имеет доступ на запись в /var/log/php_errors.log .

    Кроме того, вы можете убедиться, что используете правильный файл php.ini следующим образом:

     php -a -c /etc/php5/cli/php.ini 

    Этот вопрос и ответ были очень полезны для меня при настройке регистрации CLI в среде Ubuntu 12.04, поэтому я хотел опубликовать ответ, который отдает то, что я узнал. В дополнение к большой информации, предоставленной David Chan а также George Cummins я создал сценарий logrotate.d чтобы гарантировать, что журнал ошибок CLI PHP не будет выходить из-под контроля, а также установить это, чтобы несколько пользователей могли log ошибок в общий журнал ошибок CLI.

    Во-первых, поведение по умолчанию PHP CLI заключается в том, чтобы записывать сообщения об ошибках в стандартный вывод; вход в файл не является поведением по умолчанию. Обычно это означает ведение журнала на том же сеансе терминала командной строки, в котором выполняется команда CLI PHP. В то время как у файла PHP ini есть номера для указанного error_log необходимо добавить дополнительные места, чтобы действительно заставить его работать.

    Во-первых, мне пришлось создать исходный файл php_errors.log :

     sudo touch /var/log/php_errors.log 

    Поскольку сервер, о котором идет речь, используется веб-разработчиками, работающими над различными проектами, у меня есть общая группа для них, называемых www-users . И в этом случае я хочу, чтобы php_errors.log был php_errors.log для чтения и записи для пользователей www-users Я меняю права собственности на файл следующим образом:

     sudo chown root:www-users /var/log/php_errors.log 

    Затем измените права доступа к этому файлу:

     sudo chmod 664 /var/log/php_errors.log 

    Да, с точки зрения безопасности, имеющей файл журнала, доступный для чтения и доступный для записи кем-либо в www-users , не так велик. Но это контролируемая совместная рабочая среда. Поэтому я доверяю пользователям уважать такие вещи. И кроме того, когда PHP запускается из CLI, любой пользователь, который может это сделать, будет нуждаться в записи доступа к журналам, чтобы даже получить запись в журнале.

    Затем перейдите в /etc/php5/cli/php.ini чтобы настроить параметры Ubuntu 12.04 по умолчанию для соответствия этому новому файлу журнала:

     sudo nano /etc/php5/cli/php.ini 

    К счастью, log_errors включен по умолчанию в Ubuntu 12.04:

     log_errors = On 

    Но чтобы разрешить ведение журнала в файл, нам нужно изменить error_log чтобы он соответствовал новому файлу следующим образом:

     error_log = /var/log/php_errors.log 

    Установите скрипт logrotate.d .

    Теперь это должно быть так, но поскольку я не хочу, чтобы журналы заканчивались из-под контроля, я установил logrotate.d для php_errors.log . Создайте файл php-cli /etc/logrotate.d/ в /etc/logrotate.d/ следующим образом:

     sudo nano /etc/logrotate.d/php-cli 

    И разместите там содержимое этого скрипта демона журнала:

     /var/log/php_errors.log { weekly missingok rotate 13 compress delaycompress copytruncate notifempty create 664 root www-users sharedscripts } 

    Тестирование настройки.

    Сделав это, давайте проверим настройку с помощью подсказки David Chan выше:

     php -r "error_log('This is an error test that we hope works.');" 

    Если это работает правильно, вы должны просто вернуться в пустую командную строку, поскольку ошибки PHP CLI больше не отправляются на стандартный вывод. Поэтому проверьте фактическое значение php_errors.log для тестового сообщения об ошибке следующим образом:

     tail -n 10 /var/log/php_errors.log 

    И там должна быть временная строка ошибок, которая выглядит примерно так:

     [23-Jul-2014 16:04:56 UTC] This is an error test that we hope works. 

    в качестве диагностики вы можете попытаться заставить запись в журнал ошибок таким образом.

     php -c /etc/php5/cli/php.ini -r " error_log('test 123'); " 

    вы должны увидеть тест 123 в своем журнале

     tail /var/log/php_errors.log 

    Ведение журнала / отчетность PHP зависит также от error_reporting.

    Некоторые фреймворки PHP (например, CodeIgniter) выполняют оператор error_reporting(E_STRICT) или его эквивалент, когда они error_reporting(E_STRICT) режиме, что значительно сократит количество / количество зарегистрированных ошибок.

    Если вы хотите что-то отладить, вы можете просто поставить следующую инструкцию прямо перед кодом:

     error_reporting(E_ALL); 

    Если вы не можете понять, почему или, возможно, нет прав пользователя на php.ini, другой способ отладки ошибки анализа без информации заключается в том, чтобы обернуть ваш php-источник в другой php-источник телом, например:

     ini_set('display_errors',1); error_reporting(E_ALL); include "mybustedfile.php"; 

    в файле PHP

      error_log("You messed up!", 3, "/var/tmp/my-errors.log"); 

    в терминале

     tail -f /var/tmp/my-errors.log 

    выход Вы перепутали!