如何禁用致命错误(WSOD)保护?


12

致命错误处理是在WordPress 5.1和5.2中引入的。

有时称为白屏死亡(WSOD)保护。

在进行开发/本地安装时,有时我们希望能够根据需要断开站点,例如,在受保护的终结点内工作时,避免站点的电子邮件恢复过程(请参阅参考资料is_protected_endpoint()):

该站点遇到技术难题。请检查您的站点管理员电子邮件收件箱以获取说明。

我们如何禁用致命错误处理?

Answers:


15

我们可以通过两种方式修改函数的布尔输出wp_is_fatal_error_handler_enabled()

不变

WP_DISABLE_FATAL_ERROR_HANDLER常量设置truewp-config.php文件内:

/**
 * Disable the fatal error handler.
 */
const WP_DISABLE_FATAL_ERROR_HANDLER = true; 

要么

define( 'WP_DISABLE_FATAL_ERROR_HANDLER', true );

过滤

使用wp_fatal_error_handler_enabled布尔过滤器:

/**
 * Disable the fatal error handler.
 */
add_filter( 'wp_fatal_error_handler_enabled', '__return_false' );

笔记

参见门票#44458

wp_fatal_error_handler_enabled过滤器将覆盖的值WP_DISABLE_FATAL_ERROR_HANDLER不变。

还要注意,如果持续禁用启用过滤器,可能会引起混淆。

在我的测试中,过滤器方法(必须使用的插件)无法按预期工作,因此我改用了常量。希望我可以进一步研究。

也可以在目录(src)中添加一个自定义的插入文件,以根据需要覆盖该类。我们必须使用不同的类名,并且必须将方法定义为已注册的关闭函数fatal-error-handler.phpwp-contentWP_Fatal_Error_Handlerhandle()

禁用它的一个简单示例是使用不执行任何操作的自定义类覆盖默认错误处理程序类:

<?php
class WPSE_Fatal_Error_Handler {
    public function handle() {}
}
return new WPSE_Fatal_Error_Handler;

PHP 7+中的匿名类似乎也可以工作:

<?php
return new Class(){
    public function handle() {}
};

WP_Fatal_Error_Handler如果需要,它还可以扩展默认类。

然后是WP_SANDBOX_SCRAPING常数。参见#46045

设置WP_DEBUG为true 不会禁用WSOD保护。这是设计使然。参见#46825

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.