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. Что нужно сделать, чтобы включить отчеты об ошибках?


person ErJab    schedule 16.03.2010    source источник
comment
Дубликат: stackoverflow.com/questions/2421814/php-not- отображение ошибок/   -  person cmptrgeekken    schedule 16.03.2010


Ответы (5)


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

person Justin Ethier    schedule 16.03.2010
comment
Это тоже не работает! Странный. Я использую: ini_set(error_log, /home/me/log.log); ini_set(log_errors, правда); Да, файл журнала доступен для записи процессу веб-сервера. - person ErJab; 16.03.2010
comment
Хм... У вас есть какие-то причины не включать log_errors прямо в php.ini? Он не будет виден пользователям, но будет регистрировать любые проблемы на всем вашем сайте. - person Justin Ethier; 16.03.2010
comment
О да, я мог бы сделать это. Спасибо. - person ErJab; 16.03.2010
comment
Но тогда почему это не работает в первую очередь? Есть идеи? - person ErJab; 16.03.2010
comment
Причина, по которой это не работает, в первую очередь заключается в том, что, поскольку в вашем файле есть синтаксические ошибки, PHP вообще не анализирует его. Таким образом, он не выполняет вызовы log_errors и должен полагаться на настройки в php.ini. - person cmptrgeekken; 16.03.2010

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

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

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

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

person Your Common Sense    schedule 16.03.2010

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

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

person Alan Plum    schedule 16.03.2010

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

Пример

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

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

person goat    schedule 16.03.2010

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

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

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

person ErJab    schedule 26.02.2011