2

给出以下脚本

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

4

2 回答 2

7

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

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

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

于 2012-05-19T21:57:29.723 回答
2

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

error_reporting = E_ALL | E_STRICT
display_errors: On

祝你好运!

于 2012-05-19T21:48:21.767 回答