Подтвердить что ты не робот

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

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

У меня есть:

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

в/etc/php5/cli/php.ini

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

Этот вопрос и ответ были очень полезны для меня при настройке регистрации CLI в среде Ubuntu 12.04, поэтому я хотел опубликовать ответ, который отдает то, что я узнал. В дополнение к большой информации, предоставленной David Chan, а также George Cummins, я создал logrotate.d script, чтобы гарантировать, что журнал ошибок 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

Настройка a logrotate.d script.

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

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

И разместите там содержимое этого лог-ротатора демона script:

/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.

Ответ 3

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

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

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

tail /var/log/php_errors.log

Ответ 4

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

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

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

error_reporting(E_ALL);

Ответ 5

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

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

include "mybustedfile.php";

Ответ 6

в файле PHP

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

в терминале

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

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