为啥 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_reporting
和 display_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 不会显示任何错误(即使是从命令行)?的主要内容,如果未能解决你的问题,请参考以下文章
为啥即使实现了所有必需的方法,Class 也不会确认协议“WCSessionDelegate”错误
为啥即使实现了所有必需的方法,Class 也不会确认协议“WCSessionDelegate”错误