【问题标题】:How to have Apache output really ALL errors?如何让 Apache 输出真正的所有错误?
【发布时间】:2011-10-03 13:26:36
【问题描述】:

所以我将 display_errors 设置为“开” 和 error_reporting 到 E_ALL|E_STRICT 甚至 display_startup_errors 应为“开”。

但是,如果我忘记了 $ 或 ),Apache 会给我一个空白页。

虽然我收到一条消息,但在 CLI 上。

该消息是如何显示的?

【问题讨论】:

    标签: php apache


    【解决方案1】:
    1. 这属于 serverFault
    2. 你确定你重启了 apache?
    3. 您确定您编辑了正确的 php.ini 文件吗?
    4. 尝试将 error_reporting 设置为 E_ALL

    如果您正在编辑服务器配置,则应该完成这些建议/要点,因为您无法处理 php 脚本中的解析错误!

    【讨论】:

    • 1.抱歉,我以为您是在 php.ini 中设置的 2. 看第一品脱 3. 看第一点 4. 你告诉它是 E_ALL|E_STRICT - 你确定你的提供商确实允许 ini_set(); ?
    • 我是我自己的提供者,可以这么说。 ini_set 和设置都显示了效果,尽管不是我想要的效果 - 这是我的问题。管道 |表示按位或,并使 PHP 报告 E_ALL 和 E_STRICT(E_ALL 未涵盖,惊喜,惊喜)
    • 为什么不尝试在 php.ini 而不是 php 脚本中设置它?
    【解决方案2】:

    正如您的评论讨论所暗示的那样,问题在于您试图在脚本中设置它。

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

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

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

    解释器根本没有那么远。

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


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

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

    2) 编译脚本——它将第一步的输出转换成机器码。

    3) 运行脚本——它运行机器代码,即您的脚本,基本上从第 1 行开始。

    您遇到的问题是,在第 1 步(解析)期间,PHP 尚未运行您的任何代码(直到第 3 步才运行)。所以它运行的设置是 PHP ini 中的默认设置——如果你编写了一个只有一个 phpinfo() 调用的单行脚本,你会看到什么。

    【讨论】:

      猜你喜欢
      • 2019-08-02
      • 2014-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多