Как отключить защиту от фатальной ошибки (WSOD)?

12

Обработка фатальных ошибок была введена в WordPress 5.1 и 5.2.

Его иногда называют защитой «Белый экран смерти» (WSOD).

При работе с установками dev / local нам иногда требуется иметь возможность нарушать работу сайтов по мере необходимости и, например, избегать процесса восстановления электронной почты для сайта при работе в защищенной конечной точке (см. is_protected_endpoint()):

Сайт испытывает технические трудности. Пожалуйста, проверьте почтовый ящик администратора вашего сайта для получения инструкций.

Как мы можем отключить обработку фатальных ошибок?

birgire
источник

Ответы:

15

Мы можем изменить вывод функции boolwp_is_fatal_error_handler_enabled() двумя способами:

постоянная

Установите WP_DISABLE_FATAL_ERROR_HANDLERконстанту trueв wp-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фильтр bool:

/**
 * 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константы.

Также следите за возможную путаницу BOOL с постоянным отключением но фильтр позволяет .

В моем тестировании подход фильтра, как обязательный плагин, не работает должным образом, поэтому вместо него я использую константу. Надеюсь, я смогу изучить это дальше.

Можно также добавить пользовательскую раскрывающийся в файле fatal-error-handler.phpв wp-contentкаталог ( Src ), чтобы переопределить WP_Fatal_Error_Handlerкласс по мере необходимости. Мы должны использовать другое имя класса, и он должен определить handle()метод как зарегистрированную функцию завершения работы .

Простым примером его отключения является переопределение класса обработчика ошибок по умолчанию на собственный, который ничего не делает:

<?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_DEBUGtrue не приведет к отключению защиты WSOD. Это по замыслу. Смотрите # 46825

birgire
источник