在PHP 5.3中关闭弃用错误提示

166

我的服务器运行的是PHP 5.3,我的WordPress安装给我报错,导致我的session_start()函数出问题。

Deprecated: Assigning the return value of new by reference is deprecated in /home//public_html/hub/wp-settings.php on line 647

Deprecated: Assigning the return value of new by reference is deprecated in /home//public_html/hub/wp-settings.php on line 662

Deprecated: Assigning the return value of new by reference is deprecated in /home//public_html/hub/wp-settings.php on line 669

Deprecated: Assigning the return value of new by reference is deprecated in /home//public_html/hub/wp-settings.php on line 676

Deprecated: Assigning the return value of new by reference is deprecated in /home//public_html/hub/wp-settings.php on line 712

这很烦人,但我不想关闭屏幕上的错误报告。如何禁用这些令人烦恼的已弃用警告?

我的WordPress版本为2.9.2。


3.3.1不是WordPress的最新版本吗? - Shadur
他似乎喜欢旧版本的PHP和旧版的WordPress。 - Qchmqs
10个回答

263

您可以通过调用以下函数在代码中实现它。

error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE);
或者
error_reporting(E_ALL ^ E_DEPRECATED);

8
不,第一个基本上告诉PHP显示ERROR/WARNING/PARSE/NOTICE错误,第二个则告诉PHP显示除DEPRECATED错误以外的所有错误。 - Robus
1
在Ubuntu上使用PHP 5.5.9,“error_reporting = E_ALL&〜E_DEPRECATED&〜E_STRICT”没有效果...但是,在我的例子中,“@mysql_connect();”起了作用 :-( - molokoloco
2
@molokoloco,你犯了两个错误。首先,你没有修复任何东西,只是将其静音了。其次,你仍在使用已弃用的mysql,你至少应该切换到mysqli - Marcin Orlowski
不起作用。它被覆盖在某个地方了吗?你把它放在哪里了? - Alex
@csabinho 谢谢你澄清了这个。 - beppe9000
显示剩余4条评论

34

只需获取导致应用程序停止工作的错误,使用:

error_reporting(E_ALL ^ (E_NOTICE | E_WARNING | E_DEPRECATED));

这将停止显示通知、警告和已弃用的错误。


25

我需要把这个适应到...

error_reporting = E_ALL & ~E_DEPRECATED

16

你需要编辑PHP配置文件。找到以下行:

error_reporting = E_ALL

并将其替换为:

error_reporting = E_ALL ^ E_DEPRECATED

如果您无法访问配置文件,则可以将此行添加到PHP WordPress文件中(可能是headers.php):

error_reporting(E_ALL ^ E_DEPRECATED);

最好将此添加到 wp-config.php 中。它旨在与配置设置一起编辑。 - Nilpo

14

我遇到了类似的问题,一个SEO插件发布了大量警告,导致我的博客磁盘使用超过了计划限制。

我发现你必须在wp-config.php文件中的wp-settings.php require之后包含error_reporting命令:

   require_once( ABSPATH .'wp-settings.php' );
   error_reporting( E_ALL ^ ( E_NOTICE | E_WARNING | E_DEPRECATED ) );

通过这样做,您的错误日志文件中将不再添加警告、通知或弃用行!

在WordPress 3.8上测试过,但我想它适用于每个安装。


这是唯一有效的解决方案。 - Salem

12

所有之前的答案都是正确的。由于没有人暗示如何关闭PHP中的所有错误,我想在这里提一下:

error_reporting(0); // Turn off warning, deprecated,
                    // notice everything except error

有人可能会觉得它很有用...


10

在文件 wp-config.php 中,你可以找到常量 WP_DEBUG。确保它被设置为 false。

define('WP_DEBUG', false);

这是针对 WordPress 3.x 版本的。


6

我倾向于使用这种方法

$errorlevel=error_reporting();
$errorlevel=error_reporting($errorlevel & ~E_DEPRECATED);

这样做可以避免我意外关闭需要的内容。


1
这会让你失去一些控制。你假设当前配置是正确的,但最好根据需要直接设置,以避免重叠的配置。 - Nilpo
1
理解。每个情况都不同。 - realtebo
2
这仍然是最好的答案。它是唯一一个直接回答问题的答案:只禁用E_DEPRECATED,没有任何副作用。 - Sygmoral
1
实际上应该是 $errorlevel=error_reporting(); error_reporting($errorlevel & ~E_DEPRECATED); 但这个想法是最好的解决方案。 - cootje
@cootje:你说得对,第二个赋值语句并不是完全必要的;我有一个习惯,当更改时将新配置保存在变量中(当然,我还会将旧值保存在$<configname>_old变量中,以便在需要时能够在第二个时刻还原)。 - realtebo

1
如果PHP警告在WordPress中破坏了某些功能,但您仍想知道这些警告是什么,您可以禁用显示PHP错误/警告,并将它们仅发送到日志文件:
define( 'WP_DEBUG', true );
define( 'WP_DEBUG_DISPLAY', false );
define( 'WP_DEBUG_LOG', true );

-3

当您更改PHP版本时,会出现此错误:抑制此错误消息非常简单。

要抑制DEPRECATED错误消息,只需将以下代码添加到您的index.php文件中:

init_set('display_errors',False);


不要这样做,那会隐藏所有错误信息,而不仅仅是关于过时的警告。 - tanaydin

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