PHP вообще не возвращает ошибок

Я использую PHP и nginx и использую производственную версию php.ini. Поэтому переменная display_error установлена ​​на Off, и есть веская причина, по которой я хочу именно так. Но для определенных файлов мне нужно включить отчеты об ошибках. Я использовал ini_set для включения отчетов об ошибках. Но простой фрагмент кода вроде:

<?php
error_reporting(E_ALL);
ini_set("display_errors", 1);

echo "hi"errorrrrr
?>

не отслеживает ошибку. Он просто возвращает сообщение HTTP 500 Internal Server Error. Что я должен сделать, чтобы включить отчеты об ошибках?

5 ответов

Решение

Ответ, который я искал, находится в комментариях к этому ответу: PHP вообще не возвращает ошибок

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

- cmptrgeekken 16 марта 2010 в 18:16

Попробуйте установить настройки INI в .htaccess файл.

Настройки не вступят в силу, если вы поместите их в PHP-файл, который не компилируется из-за синтаксической ошибки.

Вы должны быть в состоянии использовать log_errors записать все ваши ошибки в файл. Вы даже можете использовать error_log записывать ошибки в определенный файл, если это облегчит вам жизнь.

Конечно, PHP не будет выполнять эти директивы, если произошла синтаксическая ошибка. Потому что этот сценарий даже не начал выполняться! Как это не удалось на этапе разбора.

Вы должны использовать другой способ установки этих директив, хотя это может быть сложно. Похоже, ваш PHP работает как CGI, а не как модуль apache, поэтому единственный способ установить директивы ini - это отредактировать сам php.ini.

Чтобы быть уверенным, пожалуйста, запустите phpinfo(); и посмотрим, что он говорит о серверном API.

В любом случае, вы должны проверять apache error_log каждый раз, когда видите 500 ошибок, чтобы выяснить, что именно произошло.

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

пример

error_reporting(E_ALL);
ini_set("display_errors", 1);
include 'some other file with a parse error.php';

Затем просто выполните сценарий оболочки. Это работает, потому что операторы, предшествующие включению, будут оценены первыми, прежде чем ваш скрипт окончательно умрет от ошибки разбора.

Другие вопросы по тегам