在使用PHP 5.4的WordPress 3.7中禁用严格标准错误

9

我正在尝试通过我的php.ini文件在更新我的计算机到OS X 10.9后禁用WordPress 3.7中的严格错误报告。 我正在运行PHP版本5.4.17,这是与Mavericks一起提供的。

在我的wp-config.php文件中,我已经启用了define('WP_DEBUG', true);,在升级我的操作系统和因此升级PHP之前是工作正常的。

在php.ini文件中,我尝试设置error_reporting为:

error_reporting = E_ALL

或者

error_reporting = E_ALL & ~E_STRICT

或者

error_reporting = E_ALL & ~E_DEPRECATED

即使
error_reporting = 0

但仍然出现错误。

display_errors被设置为关闭:

display_errors = Off

每次更改文件后,我都会使用这两个命令重新启动apache和httpd:

httpd -k restart
apachectl restart

我正在编辑的php.ini文件与phpinfo()中指向的是同一个文件,并且为了确保更改已生效,我一直在编辑error_prepend_string值:
error_prepend_string = "<span style='color: #ff0000'>ERROR: "

这些变化反映在错误信息中。

如果有关于如何调试的想法,将不胜感激。


@Jack,本地值为'32767'。主值为'无值'。 - jeremyzilar
我记得应该是这样的:error_reporting = E_ALL & ~E_NOTICE & ~E_STRICT - xlordt
此外,error_reporting(0); 在 php.ini 中当然不会起作用,应该是 error_reporting = 0。但是 32767 当然包括 E_STRICT(2048)。要么您没有编辑正确的 php 配置文件,要么您的代码在 phpinfo() 调用之前重置了该值。 - Niels Keurentjes
只是出于好奇,那么在phpinfo()页面中display_errors的值是多少? - Ja͢ck
@NielsKeurentjes 从WP 3.6开始,WP_DEBUG似乎强制执行严格模式 - 然而,在升级到Mavericks和PHP 5.4之前,我正在运行3.6,并且没有出现这些错误。 - jeremyzilar
显示剩余8条评论
3个回答

18
在WordPress 3.7中,函数wp_debug_mode(定义在wp-includes/load.php中,并从wp-settings.php中调用)将error_reporting(E_ALL)设置。

由于wp-settings.php本身是在wp-config.php的末尾加载的,因此您无法从wp-config.php更改此设置(或者说您可以,但它将被覆盖)。
解决方法是创建一个“必须使用插件”,即一个位于/ wp-content / mu-plugins / 文件夹中的.php文件,其中包含:
<?php
if (WP_DEBUG && WP_DEBUG_DISPLAY) 
{
   ini_set('error_reporting', E_ALL & ~E_STRICT & ~E_DEPRECATED);
}

这部分有效,因为在functions.php加载之前会发生一些错误。不过还是给你点赞 :) - frnhr
我在有限的测试中没有看到任何错误,尽管我想当加载插件时可能会发生。查看WordPress加载顺序,也许一个解决方案是创建一个非常简单的插件来设置error_reporting,并确保它在任何其他插件之前加载(默认情况下,它们按字母顺序加载)。 - adelval
5
为了获得最佳结果,请使用adelval提供的解决方案,但是将其放入.php文件中,例如:/wp-content/mu-plugins/errorreporting.php。 "mu" 代表 "must-use",会在主题和插件之前加载,但在设置错误报告后加载。您不必激活它,因为它们是“必须使用”的。 - Radley Sustaire
1
感谢@Alexandre的编辑,它将RadGH的评论融入了答案,使其更加完善。 - adelval
这对我也没有帮助,因为弃用的错误消息在mu-plugin之前就完成了。在我的情况下,问题出在wp-db.php中,错误如下: 已弃用:mysql_connect() - Kim Steinhaug
这个!- 非常感谢您。 - Martin Eckleben

0
如果您在wp-config.php文件中将WP_DEBUG设置为“false”,则这些不会影响您的网站。
但问题是有时候上述方法不起作用。这可能发生在便宜/共享主机上,因为它们强制显示PHP错误、警告和通知。
在这种情况下,您可以从wp-config.php文件中删除此行:
define('WP_DEBUG', false);

并放置这个:

ini_set('log_errors','On');
ini_set('display_errors','Off');
ini_set('error_reporting', E_ALL );
define('WP_DEBUG', false);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', false);

在我的情况下它是工作的。


0

我发现只有

error_reporting = off

这很烦人,因为从 PHP 5.4 开始,STRICT 错误已经成为了所有错误的一部分。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接