为什么 PHP 不显示所有的语法错误?

这是我的错误设置


ini_set('display_errors', 1);

ini_set('display_startup_errors', 1);

error_reporting(E_ALL|E_PARSE);

现在我写这个测试代码:


helloooooo;

它告诉我:


使用未定义的常量 hellooooo ...


到目前为止,一切都很好。


现在我从所谓的代码末尾删除分号:


helloooooo

什么都不显示。它显示一个白页。


根据我的经验,每当我看到一个白页时,就会出现语法错误,所以我会寻找拼写错误。


问题是为什么 PHP 在这种情况下没有帮助?


有人说:


语法检查在执行任何代码之前完成。因此,如果存在语法错误,它就无法执行 ini_set() 函数。


PHP 解释器如何先应用设置然后执行其余代码?


JavaScript 解释器可以在运行时检测到相同的错误。试试这个:


<script>

helloooooo

</script>

现在转到 Firefox => 工具 => WebDeveloper => WebConsole


ReferenceError: hellooooo 未定义


30秒到达战场
浏览 141回答 1
1回答

qq_笑_17

PHP 的默认错误报告机制(可能)会抑制错误输出。如果您尝试使用该函数在运行时打开它error_reporting,那么 PHP 将首先必须成功解析文件,然后执行它以设置新的所需错误报告级别。当存在语法错误时失败,因为 PHP 无法成功解析和执行文件以更改错误报告级别。语法错误被抑制了,因为……好吧……它还不能改变错误报告级别。Javascript 没有,它会输出遇到的所有错误。PHP 喜欢抑制错误的原因是因为它在服务器上运行,内部服务器调试细节不应该显示在公共网页上。在没有实际意义的 Javascript 中,因为它无论如何都在浏览器中运行,并且错误会报告到控制台,而普通用户看不到。此外,PHP 确实将所有错误记录到一个日志文件中,因此与您在 Javascript 中查找错误的方式相同,您也可以明确地在 PHP 的日志文件中查找它们。
打开App,查看更多内容
随时随地看视频慕课网APP