使用 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_reporting
和 display_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而不使用插件。