PHP 错误抑制被忽略

Posted

技术标签:

【中文标题】PHP 错误抑制被忽略【英文标题】:PHP error suppression is being ignored 【发布时间】:2013-02-18 15:16:05 【问题描述】:

我当前的 php.ini 文件设置为报告除弃用和严格标准之外的所有错误,如下所示:

error_reporting = E_ALL & ~E_STRICT & ~E_DEPRECATED

使用此设置的原因是我们迫切需要在托管我们网站的 linux 服务器上执行 PHP 升级;问题在于,不推荐使用的功能和严格的标准建议将很快填满 170 多个网站的错误日志文件。这些错误主要是由于一些小问题,例如函数没有被声明为静态等。最终我们将通过所有站点并修复这些问题,但同时我们需要抑制错误。

我在本地测试环境中遇到的问题(运行我们希望升级到的 PHP 版本 - 5.4.3)是错误仍然显示,之前打印了以下内容:

SCREAM: Error suppression ignored for

谁能告诉我为什么忽略错误抑制以及如何正确抑制错误?

提前致谢。

【问题讨论】:

也许是个愚蠢的问题,但是你重启了 Apache 吗? 这不是一个愚蠢的问题,令人惊讶的是它被忽视的频率。但是是的,我正在重新启动所有 WAMP 服务。 【参考方案1】:

您似乎正在使用尖叫扩展程序。来自手册:

scream 扩展提供了禁用静音错误控制操作符的可能性,以便报告所有错误。此功能由 ini 设置控制。

Scream 是一个调试扩展,旨在显示尽可能多的错误消息。这是通过忽略@ 运算符并始终具有最高可用的error_reporating 级别来完成的。 (无论您的 error_reporting 设置如何)。因此,您必须停用 php.ini 中的扩展:

scream.enabled = off

顺便说一句:我不会更新有 170 个网站的服务器出现代码错误。现在是一颗定时炸弹。最好将它们逐个站点迁移到新的 PHP 版本。在迁移过程中可能有两台服务器并行。

【讨论】:

在 php.ini 文件中添加scream.enabled = Off 并不能阻止错误抑制被忽略。目前添加该行没有任何作用。我知道这是一种非常混乱的做事方法,但它只是暂时的。到目前为止,我没有安装另一个 PHP 实例作为 CGI 的运气,所以我正在寻找其他选项。有什么想法吗? 我能够在我们的服务器上运行第二个 PHP 实例,感谢您的建议。 @WilliamStewart 抱歉,我没有认出你的第一条评论。在没有查看服务器的实际设置的情况下,我可以指出error_reporting 级别可以根据脚本进行设置。也许您的 170 个站点中的一个或多个这样做?但是,常规的 PHP 错误消息不应具有“Scream:”前缀。关于第二条评论:我认为这是个好主意!

以上是关于PHP 错误抑制被忽略的主要内容,如果未能解决你的问题,请参考以下文章

抑制php上的mysql错误

PHP 通知抑制;只有某些情况/方法

php.ini 中的设置被部分忽略了?

如何在ssh跳转连接上抑制“被信号1杀死”错误

如何将“拉函数错误”消息抑制到标准输出?

@错误抑制运算符和set_error_handler