为啥 PHP 5.2.14 不会显示任何错误(即使是从命令行)?

Posted

技术标签:

【中文标题】为啥 PHP 5.2.14 不会显示任何错误(即使是从命令行)?【英文标题】: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 设置。

【问题讨论】:

【参考方案1】:

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

    不要加载 ini 文件。 显式打开 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 文件中。

【讨论】:

更好的是,添加一种在开发期间(并且仅在开发期间)将其关闭的方法。这些错误消息可以告诉潜在的黑客很多关于您的服务器的信息。

以上是关于为啥 PHP 5.2.14 不会显示任何错误(即使是从命令行)?的主要内容,如果未能解决你的问题,请参考以下文章

为啥ios build即使成功也不会在试飞中显示

即使地图显示没有任何错误,onMapReady 也不会调用

为啥即使实现了所有必需的方法,Class 也不会确认协议“WCSessionDelegate”错误

为啥即使实现了所有必需的方法,Class 也不会确认协议“WCSessionDelegate”错误

为啥这个 PHP MongoDB 查询即使有结果也不返回任何结果?

当我将空值视为这样的数组时,为啥 PHP 不会抱怨?