почему эта синтаксическая ошибка возвращает HTTP-ошибку 500, когда включен «display_errors»?

учитывая следующий сценарий

<?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 

Удачи!