【问题标题】:Why won't PHP 5.2.14 display any errors (even from the command line)?为什么 PHP 5.2.14 不会显示任何错误(即使是从命令行)?
【发布时间】:2011-04-18 17:07:34
【问题描述】:

我在 Windows 2008 R2 服务器和 Windows 7 64 位上安装了 PHP 5.2.10 和 PHP 5.2.14(x86 非线程安全 Win32 版本)。

由于某种原因 PHP 5.2.14 拒绝显示错误消息。

即使我在php.ini 中设置了以下设置,如果我使用 5.2.14,我也不会收到任何错误报告:

error_reporting = E_ALL
display_errors = On

即使在使用 php.exe 从命令行运行测试脚本时也会发生这种情况,但存在故意的语法错误:

c:\php>php test.php

PHP 正在使用正确的 php.ini 文件,因为当我运行 php.exe -i 时,我可以看到我的设置发生了变化。

我还注意到 PHP 5.2.14 中的 php.exe 启动速度非常慢。

当我在同一台机器上使用 PHP 5.2.10 执行同一组测试时,我收到的错误消息报告得很好。

php.ini 两个文件都是库存文件(基于 php.ini-recommended),但修改了 error_reportingdisplay_errors 设置。

【问题讨论】:

    标签: configuration error-handling php error-reporting


    【解决方案1】:

    我发现这真的很烦人,所以这里有一个从命令行检查语法的策略:

    1. 不要加载 ini 文件。
    2. 显式打开 display_errors 和 display_startup_errors。

    php -n -l -d display_errors -d display_startup_errors path/to/your/phpfile.php

    $ php -h 
    -n               No php.ini file will be used
    -l               lint, syntax checking only
    -d foo[=bar]     Define INI entry foo with value 'bar'
    

    【讨论】:

    • display_errors 标志中有一点错字,尽管这是最好的答案
    【解决方案2】:

    我正在运行更高版本的 PHP (5.4.24),但这些其他答案缺少 -d option I found exemplified elsewhere,这会使 PHP 在从命令行运行时显示可理解的解析错误:

    php -d display_errors test.php
    

    这是我在谷歌上搜索的问题的最佳答案。使用-l 运行 linter 只会告诉您“解析 foo.php 时出错”。

    【讨论】:

    • 我用这个作为别名alias phprun="php -d display_errors"
    【解决方案3】:

    您可能还必须启用display_startup_errors

    display_startup_errors  boolean
    

    即使display_errors 开启,PHP 启动序列期间发生的错误也不会显示。强烈建议关闭display_startup_errors,调试除外。

    您也可以尝试使用 c:\php>php -l test.php 对文件进行 lint 以测试语法错误。

    【讨论】:

    • 你每天都会学到新东西。事实证明,PHP 无法加载 SQLite3 扩展,因为 pdo.dll 扩展(对此有依赖关系)没有取消注释。将display_startup_errors 设置为关闭,这似乎会导致解析错误被吞噬。非常感谢。
    • 其实...进一步调查。有人在error_reporting 标志值周围加上了引号。这才是真正的原因。即 -error_reporting = "E_ALL & ~E_NOTICE".
    【解决方案4】:

    最近,我不得不在别人的项目上工作......无法调试,我别无选择,只能检查这个:

    error_reporting(0);
    

    所以,请检查您的源代码。搜索类似这样的内容:“error_reporting(0);”。

    一旦你找到它,评论它!!!

    通常,您不必将其放在源代码中,而是放在 php.ini 文件中。

    【讨论】:

    • 更好的是,添加一种在开发期间(并且仅在开发期间)将其关闭的方法。这些错误消息可以告诉潜在的黑客很多关于您的服务器的信息。
    猜你喜欢
    • 2020-03-21
    • 1970-01-01
    • 2011-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-24
    • 2014-09-21
    相关资源
    最近更新 更多