Назад | Перейти на главную страницу

ошибка в php не регистрируется или не отображается

Я не могу отображать ошибки на экране при записи в файл журнала. При проверке распечатки phpinfo () у меня такое же значение master a local для

display_errors On 
display_startup_errors On
error_log /var/log/php.log
error_reporting E_ALL & ~E_NOTICE
log_errors On
log_errors_max_len

ls -l /var/log/php.log is -rw-rw-rw- 1 root root 0 21 июня, 07:47 /var/log/php.log для / var и / varlog drwxrwxrwx 23 root root 4096 2 июня 11 : 13 var

когда в коде есть ошибка, браузеры ничего не показывают на странице, а браузер сообщает, что для страницы нет источника. Любые предложения о том, где еще искать или изменить, чтобы ошибки где-то появлялись (в любом месте было бы хорошо)

редактировать: мой сценарий ошибки сейчас

<?php
ini_set('display_errors', 1);
error_reporting(E_ALL);
echo "print from error.php 2 ";
error                        
//print from erroerror to cuase logging to happen.
?>

это будет напечатано на дисплее и в журнале

Notice: Use of undefined constant error - assumed 'error' in /var/www/piku_dev2/error.php on line 7

но если я помещаю мусор вроде # @ $% $ в строку ошибки, я не получаю ни одного сообщения об ошибке.

Edit2: Проблема оказалась в файле httpd.conf. Я пока не знаю, что это было, так как это было исправлено кем-то другим.

Я вижу несколько возможных решений вашей проблемы. Вот наиболее частые проблемы, с которыми вы можете столкнуться:

  • В вашем примере вы используете #@$%$ чтобы вызвать ошибку. Однако PHP обрабатывает любую строку, начинающуюся с хеша, как комментарий, поэтому эта строка никогда не будет оцениваться и, следовательно, никогда не вызовет состояние ошибки.
  • Есть 2 разных php.ini файлы, о которых вам следует знать; один для Apache и один для PHP CLI. Убедитесь, что тот, который вы отредактировали, предназначен для Apache, если ваш скрипт вызывается из веб-браузера. Каталог, в котором находится этот файл, будет отличаться от дистрибутива к дистрибутиву, но путь по умолчанию обычно немного отличается от /etc/php/apache/php.ini
  • Вы должен перезапустите Apache после внесения изменений в php.ini файл или отправьте сигнал SIGHUP в Apache, чтобы принудительно перечитать файл конфигурации.
  • В error_reporting и log_errors переменные конфигурации могут быть перезаписаны локально в файле vhost Apache или даже в самом скрипте PHP. Убедитесь, что конфигурация сервера по умолчанию не перезаписывает эти переменные локально в конфигурации Apache для используемого вами vhost.
  • Разрешения вашего /var/log/php.log файл должен быть доступен для записи Apache. Обычно безопасно установить владельцем этого файла пользователя Apache в вашей системе (пользователь Apache обычно либо www-data или apache).

Раньше у меня не было журналов ошибок в двух случаях:

  1. У пользователя, под которым был запущен Apache, не было разрешений на изменение php_error_log файл.
  2. Ошибка 500 произошла из-за неправильной конфигурации .htaccess, например неправильные настройки модуля перезаписи. В этой ситуации ошибки регистрируются в Apache. error_log файл.

Похоже, что display_errors или Отчет об ошибках были отменены чем-то другим.

Это случилось со мной из-за приложения, которое позже меняет error_reporting в начальной загрузке, чего я не видел.

Хорошей практикой является поиск error_reporting в приложении и наблюдение за его изменением.

Моя проблема заключалась в том, что apache не только не мог писать в файлы журнала, но и не мог писать в каталог / var / log / httpd.

Мое исправление?

php.ini error_log = /var/log/httpd/php-error.log

chmod 777 / var / журнал chmod 777 / var / log / httpd

Кстати, я использую CentOS 6. Должен быть способ лучше, чем chmod'ing вашего журнала и папки httpd на 777, но это был единственный способ заставить его работать. Вы можете добавить apache в корневую группу, что было бы плохой идеей.