如何让Apache输出真正的ALL错误?

Raf*_*ael 2 php apache

所以我将display_errors设置为"On"并将error_reporting设置为E_ALL | E_STRICT,甚至display_startup_errors也应为"On".

然而,如果我忘记$或a),Apache会给我一个空白页面.

在CLI上虽然我收到了消息.

该消息是如何显示的?

tim*_*dev 6

正如您的评论讨论提示的那样,问题是您正在尝试在脚本中设置它.

为了运行脚本,PHP解释器必须首先解析该脚本.如果解析失败(即:存在语法错误),则脚本无效,并且解释器根本不运行它 - 它会发出致命错误.

因此,语法错误是编译时错误,而不是运行时错误.

因此,如果您忘记$,)或;,例如,您的脚本语法无效.因此脚本不会运行.因此,您的ini_set()和类似语句永远不会运行.

口译员根本没有那么远.

将这些错误输出的唯一方法是在解释器尝试解析破坏的脚本之前设置这些变量,即:在php.ini中(或者如果你在mod_php下运行,可能在.htaccess中).这样,在解释器尝试解析损坏的脚本之前设置错误报告配置.


当PHP运行你的脚本时,它基本上经历了三个步骤(这是简化的):

1)解析脚本 - 它从上到下扫描整个脚本,并创建它的表示.如果您发生语法错误,则无法解析,并发出致命错误,并停止.

2)编译脚本 - 它接受第一步的输出,并将其转换为机器代码.

3)运行脚本 - 它运行该机器代码,这是您的脚本,主要从第1行开始.

您遇到的问题是,第1步(解析)时,PHP还没有运行任何代码的(事实并非如此,直到第3步).因此,它运行的设置是PHP ini中的默认设置 - 如果您编写的单行脚本中只有一个phpinfo()调用,您会看到这些设置.