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

时间:2012-05-19 21:38:40

标签: php

给出以下脚本

<?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不应该总是显示错误吗?

2 个答案:

答案 0 :(得分:6)

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

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

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

答案 1 :(得分:2)

如果强制php在运行时显示错误对你不起作用,你可以尝试其他选项,比如在php.ini中设置它:

error_reporting = E_ALL | E_STRICT
display_errors: On

祝你好运!