учитывая следующий сценарий
<?php ini_set('display_errors','On'); error_reporting(E_ALL); thisisanerror ?>
Я получаю ожидаемый
Notice: Use of undefined constant error - assumed 'error' in /htdocs/test.php on line 8
но если я добавлю что-то в скрипт
<?php ini_set('display_errors','On'); error_reporting(E_ALL); error function test () { echo('test'); } ?>
я получил
HTTP Error 500 (Internal Server Error): An unexpected condition was encountered while the server was attempting to fulfill the request.
Почему в последнем случае я получаю ошибку 500 вместо обычной синтаксической ошибки? Должна ли display_errors отображать ошибку?
Второй пример кода – это синтаксическая ошибка. Это означает, что PHP не будет продвигаться до стадии выполнения кода и умрет во время разбора. Поскольку никакого кода не выполняется, эффекты вызова ini_set()
не отображаются, поэтому вы не получите текстовую ошибку PHP, указывающую на проблему.
Ошибка синтаксического анализа является фатальной, и веб-сервер (правильно) настроен для обработки фатальных ошибок PHP с кодом ответа 500. Поскольку ваш PHP-скрипт не выдал никакого результата, веб-сервер вернет документ с ошибкой по умолчанию для условия 500.
Если вы хотите увидеть текстовое сообщение для ошибок синтаксического разбора в браузере – и, как правило, обычно это не производство, вам нужно будет включить отчет об ошибках в php.ini или с помощью файла .htaccess.
Если вы не можете заставить php показывать ошибку во время выполнения, вы можете попробовать другие параметры, например, установить в php.ini:
error_reporting = E_ALL | E_STRICT display_errors: On
Удачи!