【发布时间】:2011-10-03 13:26:36
【问题描述】:
所以我将 display_errors 设置为“开” 和 error_reporting 到 E_ALL|E_STRICT 甚至 display_startup_errors 应为“开”。
但是,如果我忘记了 $ 或 ),Apache 会给我一个空白页。
虽然我收到一条消息,但在 CLI 上。
该消息是如何显示的?
【问题讨论】:
所以我将 display_errors 设置为“开” 和 error_reporting 到 E_ALL|E_STRICT 甚至 display_startup_errors 应为“开”。
但是,如果我忘记了 $ 或 ),Apache 会给我一个空白页。
虽然我收到一条消息,但在 CLI 上。
该消息是如何显示的?
【问题讨论】:
如果您正在编辑服务器配置,则应该完成这些建议/要点,因为您无法处理 php 脚本中的解析错误!
【讨论】:
正如您的评论讨论所暗示的那样,问题在于您试图在脚本中设置它。
为了运行脚本,PHP 解释器必须首先解析该脚本。如果解析失败(即:存在语法错误),则脚本无效,解释器根本不会运行它——它会发出致命错误。
因此,语法错误是编译时错误,而不是运行时错误。
因此,例如,如果您忘记了 $、) 或 ;,则您的脚本语法无效。因此脚本没有运行。因此,您的 ini_set() 和类似的语句永远不会运行。
解释器根本没有那么远。
让这些错误输出的唯一方法是在解释器尝试解析您损坏的脚本之前设置这些变量,即:在 php.ini 中(或者如果你是在 .htaccess在 mod_php 下运行)。这样,错误报告配置就会在解释器尝试解析您损坏的脚本之前设置。
当 PHP 运行你的脚本时,它基本上会经过三个步骤(这是简化的):
1) 解析脚本——它从上到下扫描整个脚本,并创建它的表示。如果您犯了语法错误,它将无法解析,并发出致命错误并停止。
2) 编译脚本——它将第一步的输出转换成机器码。
3) 运行脚本——它运行机器代码,即您的脚本,基本上从第 1 行开始。
您遇到的问题是,在第 1 步(解析)期间,PHP 尚未运行您的任何代码(直到第 3 步才运行)。所以它运行的设置是 PHP ini 中的默认设置——如果你编写了一个只有一个 phpinfo() 调用的单行脚本,你会看到什么。
【讨论】: