Jak wyłączyć ochronę przed błędem krytycznym (WSOD)?

12

Obsługa błędów krytycznych została wprowadzona w WordPress 5.1 i 5.2.

Czasami nazywany jest ochroną White Screen Of Death (WSOD).

Podczas pracy nad instalacjami deweloperskimi / lokalnymi czasami chcemy być w stanie rozbić strony w razie potrzeby i np. Uniknąć procesu odzyskiwania wiadomości e-mail dla witryny podczas pracy w chronionym punkcie końcowym (patrz is_protected_endpoint()):

Witryna ma problemy techniczne. Aby uzyskać instrukcje, sprawdź skrzynkę e-mail administratora swojej witryny.

Jak możemy wyłączyć obsługę błędu krytycznego?

birgire
źródło

Odpowiedzi:

15

Możemy zmodyfikować wyjście funkcji bool na wp_is_fatal_error_handler_enabled()dwa sposoby:

Stały

Ustaw WP_DISABLE_FATAL_ERROR_HANDLERstałą truew wp-config.phppliku:

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

lub

define( 'WP_DISABLE_FATAL_ERROR_HANDLER', true );

Filtr

Użyj wp_fatal_error_handler_enabledfiltra bool:

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

Notatki

Zobacz bilet # 44458

wp_fatal_error_handler_enabledFiltr zastąpi wartość WP_DISABLE_FATAL_ERROR_HANDLERstałą.

Uważaj również na możliwe pomyłki bool ze stałym wyłączaniem, ale włączaniem filtra .

W moich testach podejście filtrujące, jako wtyczka, której należy użyć , nie działa zgodnie z oczekiwaniami, więc zamiast tego używam stałej. Mam nadzieję, że mogę przyjrzeć się temu dalej.

Można również dodać niestandardowy plik drop-infatal-error-handler.php do wp-contentkatalogu ( src ), aby w WP_Fatal_Error_Handlerrazie potrzeby zastąpić klasę. Musimy użyć innej nazwy klasy i musi ona zdefiniować handle()metodę jako zarejestrowaną funkcję zamykania .

Prostym przykładem wyłączenia byłoby zastąpienie domyślnej klasy procedury obsługi błędów niestandardową klasą, która nic nie robi:

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

Wydaje się, że działa także anonimowa klasa w PHP 7+:

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

W WP_Fatal_Error_Handlerrazie potrzeby może również rozszerzyć domyślną klasę.

Potem jest WP_SANDBOX_SCRAPINGstała. Zobacz # 46045

Ustawienie wartości WP_DEBUGtrue nie spowoduje wyłączenia ochrony WSOD. To jest z założenia. Zobacz # 46825

birgire
źródło