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

Posted

技术标签:

【中文标题】使用 PHP 5.4 禁用 WordPress 3.7 中的严格标准错误【英文标题】:Disabling Strict Standards Errors in WordPress 3.7 with PHP 5.4 【发布时间】:2013-11-03 23:15:57 【问题描述】:

在将计算机更新到 OS X 10.9 后,我试图通过我的 php.ini 文件禁用 WordPress 3.7 中的 STRICT 错误报告。我正在运行 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: "

而这些变化是在错误中体现出来的。

任何关于如何调试它的想法将不胜感激。

【问题讨论】:

phpinfo()里面error_reporting的值是什么? phpinfo() 还将在 Core 部分显示 error_reportingdisplay_errors 的实际本地和主运行时值,请分享它们显示的内容。 @Jack 本地值是“32767”。 主值是“没有价值”。 我认为它.. error_reporting = E_ALL & ~E_NOTICE & ~E_STRICT 如果我没记错的话 另外,error_reporting(0); 在 php.ini 中当然不能工作,应该是 error_reporting = 0。但是32767 肯定包括 E_STRICT (2048)。要么你没有编辑正确的 php 配置文件,要么你的代码在 phpinfo() 调用之前的某个地方重置了值。 【参考方案1】:

在 Wordpress 3.7 中,函数wp_debug_mode(在wp-includes/load.php 中定义,并从wp-setings.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被加载之前发生了一些错误。但是为这个想法+1 :) 我在我的(有限)测试中没有看到任何错误,但我想它可能在加载插件时发生。查看Wordpress load order,也许一个解决方案是创建一个非常简单的插件来设置error_reporting,确保它在任何其他插件之前加载(默认情况下它们按字母顺序加载)。 为获得最佳效果,请使用 adelval 提供的解决方案,但将其放在 .php 文件中,例如:/wp-content/mu-plugins/errorreporting.php。 “mu”代表“必须使用”,将在主题和插件之前加载,但在设置错误报告之后。您也不必激活它,因为它们是“必须使用的”。 感谢@Alexandre 的编辑,它通过合并 RadGH 的评论改进了答案 这对我也没有帮助,因为已弃用的错误消息甚至在它到达 mu-plugin 之前就已完成。就我而言,问题出在 wp-db.php 中,错误是:已弃用:mysql_connect()【参考方案2】:

我发现只有

error_reporting = off

有效,因为自 PHP 5.4 起 STRICT 错误已成为 ALL 的一部分,这很烦人。

【讨论】:

【参考方案3】:

如果您在 wp-config.php 文件中将 WP_DEBUG 设置为 'false'。这些不会影响您的网站。

Bot 的问题是上面有时不起作用。 这可能发生在强制显示 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);

在我的情况下它的工作。

【讨论】:

以上是关于使用 PHP 5.4 禁用 WordPress 3.7 中的严格标准错误的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 5.4 和 WordPress 4.7 的辅助函数 __() 冲突

php WordPress - 禁用Gutenberg而不使用插件。

访问 AWS EB PHP 5.4 上的 http X_* 标头

php [Wordpress]禁用wordpress评论

Wordpress:禁用白屏死机,启用标准 PHP 错误

php WordPress:禁用评论