禁用 debug.log 中的 WordPress“PHP 已弃用:”消息

Mar*_*tin 5 wordpress

我已经搜索并尝试了解决这个问题的各种解决方案,但没有一个有效。

看起来 WordPress 忽略了以下内容并记录了已弃用的消息:

error_reporting(E_ALL ^ E_DEPRECATED);
ini_set('error_reporting', E_ALL ^ E_DEPRECATED);
Run Code Online (Sandbox Code Playgroud)

我的php.ini

error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT
Run Code Online (Sandbox Code Playgroud)

我的wp-config.php

<?php
define( 'WP_CACHE', true );
error_reporting(E_ALL ^ E_DEPRECATED);

...

define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', false);
Run Code Online (Sandbox Code Playgroud)

插件正在向我的debug.log文件发送PHP Deprecated: ...日志消息。每天生成数GB。使debug.log无法使用。

我向插件开发人员报告,但有些插件没有及时修复。我无法自行修复,因为插件更新会覆盖我的更改。

禁用这些的解决方案是什么?

服务器:

  • 在 AWS Lightsail (2GB 2vcpu) 上运行 Bitnami/Wordpress
  • Linux 5.10.0-25-云-amd64 x86_64
  • PHP 版本8.2.10

vol*_*ulz 2

更新
我创建了一个WordPress 插件,可以从您舒适的管理面板添加、删除和控制 MU 插件。

原始帖子
无论您error_reporting()在 中设置什么wp-config.php,也无论 中的内容是什么,它都会被 WordPress 中(由调用)php.ini覆盖,如下所示:function wp_debug_mode()wp-includes/load.phpwp-settings.php

if ( WP_DEBUG ) {
    error_reporting( E_ALL );
    //...
} else {
    error_reporting( E_CORE_ERROR | E_CORE_WARNING | E_COMPILE_ERROR | E_ERROR | E_WARNING | E_PARSE | E_USER_ERROR | E_USER_WARNING | E_RECOVERABLE_ERROR );
}
Run Code Online (Sandbox Code Playgroud)

当然,您可以更改E_ALLE_ALL ^ E_DEPRECATEDinside wp-includes/load.php,但这(最终)将被 WordPress 更新覆盖。

另一个(持久)选项是使用 amust use plugin来重置error_reporting(再次)。然而,这不会消除 WordPress 核心产生的弃用警告。无论如何,wp-content/mu-plugins如果该目录不存在,请创建该目录。在该目录中添加__error_reporting.php以下内容:

<?php
error_reporting(E_ALL ^ E_DEPRECATED);
Run Code Online (Sandbox Code Playgroud)

必须使用的插件将在所有其他插件之前按字母顺序加载(因此有__前缀)。