为什么 PHP 5.2.14 不会显示任何错误(即使是来自命令行)?

Why won't PHP 5.2.14 display any errors (even from the command line)?

提问人:Kev 提问时间:9/29/2010 最后编辑:hakreKev 更新时间:4/22/2020 访问量:14619

问:

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

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

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

error_reporting = E_ALL
display_errors = On

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

c:\php>php test.php

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

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

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

这两个文件都是库存的(基于 ),但修改了 和 设置。php.iniphp.ini-recommendederror_reportingdisplay_errors

配置 错误处理 PHP 错误报告

评论


答:

5赞 Gordon 9/29/2010 #1

您可能还必须启用display_startup_errors

display_startup_errors  boolean

即使打开,也不会显示 PHP 启动过程中发生的错误。强烈建议保持关闭状态,但调试除外。display_errorsdisplay_startup_errors

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

评论

0赞 Kev 9/29/2010
你每天都能学到新东西。事实证明,PHP 无法加载 SQLite3 扩展,因为 pdo.dll 扩展(依赖于此)没有取消注释。设置为关闭后,这似乎会导致解析错误被吞噬。非常感谢。display_startup_errors
0赞 Kev 9/29/2010
实际上。。。进一步调查。有人在标志值周围加上引号。这才是真正的原因。即 -。error_reportingerror_reporting = "E_ALL & ~E_NOTICE"
3赞 Martin 12/9/2010 #2

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

error_reporting(0);

因此,请检查您的源代码。搜索如下内容:“error_reporting(0);”。

找到它后,评论它!!

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

评论

0赞 EpicVoyage 1/22/2013
更好的是,添加一种在开发期间(并且仅在开发期间)关闭它的方法。这些错误消息可以告诉潜在的黑客很多关于您的服务器的信息。
8赞 Nathan 3/7/2014 #3

我正在运行一个更高的 PHP (5.4.24),但这些其他答案缺少我在其他地方发现的 -d 选项,这使得 PHP 在从命令行运行时显示可理解的解析错误:

php -d display_errors test.php

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

评论

2赞 Alfred Bez 3/17/2015
我用它作为别名alias phprun="php -d display_errors"
11赞 Gunnarsson 9/6/2014 #4

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

  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'

评论

0赞 ROLO 2/13/2015
display_errors旗帜中有一点错别字,尽管这是最好的答案