PHP CLI не будет регистрировать ошибки - PullRequest
39 голосов
/ 17 июня 2011

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

У меня есть:

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

в /etc/php5/cli/php.ini

Мне не хватает дополнительных настроек, чтобы это работало?

Ответы [ 6 ]

40 голосов
/ 17 июня 2011

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

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

php -a -c /etc/php5/cli/php.ini
30 голосов
/ 23 июля 2014

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

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

Сначала мне пришлось создать исходный файл php_errors.log:

sudo touch /var/log/php_errors.log

Поскольку данный сервер используется веб-разработчиками, работающими над различными проектами, я создал для них общую группу под названием www-users.И в этом случае я хочу, чтобы 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/ следующим образом:

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.
15 голосов
/ 08 ноября 2013

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

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

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

tail /var/log/php_errors.log
3 голосов
/ 08 января 2014

Поведение PHP для ведения журналов и отчетов также зависит от error_reporting.

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

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

error_reporting(E_ALL);
2 голосов
/ 24 июня 2014

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

ini_set('display_errors',1);
error_reporting(E_ALL);

include "mybustedfile.php";
1 голос
/ 26 сентября 2014

в PHP-файле

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

в терминале

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

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

...