当'display_errors'打开时,为什么此语法错误会返回HTTP错误500?

jel*_*ela 2 php

给出以下脚本

<?php

ini_set('display_errors','On');
error_reporting(E_ALL);

thisisanerror

?>
Run Code Online (Sandbox Code Playgroud)

我得到了预期

Notice: Use of undefined constant error - assumed 'error' in /htdocs/test.php on line 8
Run Code Online (Sandbox Code Playgroud)

但是如果我在脚本中添加一些内容

<?php

ini_set('display_errors','On');
error_reporting(E_ALL);

error

function test () {

    echo('test');

}

?>
Run Code Online (Sandbox Code Playgroud)

我明白了

HTTP Error 500 (Internal Server Error): An unexpected condition was encountered while the server was attempting to fulfill the request.
Run Code Online (Sandbox Code Playgroud)

为什么我在后一种情况下得到500错误而不是正常的语法错误?不应该display_errors总是显示错误?

Dav*_*dom 6

第二个代码示例是完全语法错误.这意味着PHP不会进展到代码执行点,并且会在解析时死掉.由于没有执行代码ini_set(),因此看不到调用的效果,因此您不会收到指示问题的PHP文本错误.

解析错误是致命的,并且Web服务器(正确地)设置为使用500响应代码处理PHP致命错误.由于您的PHP脚本没有产生任何输出,因此Web服务器将返回500条件的默认错误文档.

如果你想在浏览器中看到解析错误的文本消息 - 顺便说一下,这通常不会产生生产 - 你需要在php.ini或使用.htaccess文件中打开错误报告.