Come disabilitare la protezione da errore irreversibile (WSOD)?


12

La gestione degli errori fatali è stata introdotta in WordPress 5.1 e 5.2.

A volte viene definita protezione White Screen Of Death (WSOD).

Quando si lavora su installazioni dev / locali, a volte vogliamo essere in grado di interrompere i siti secondo necessità, ad esempio evitare il processo di recupero della posta elettronica per il sito quando si lavora all'interno di un endpoint protetto (vedere is_protected_endpoint()):

Il sito sta riscontrando difficoltà tecniche. Controlla la posta in arrivo dell'amministratore del tuo sito per istruzioni.

Come possiamo disabilitare la gestione degli errori fatali?

Risposte:


15

Possiamo modificare l' output bool della wp_is_fatal_error_handler_enabled()funzione in due modi:

Costante

Imposta la WP_DISABLE_FATAL_ERROR_HANDLERcostante trueall'interno del wp-config.phpfile:

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

o

define( 'WP_DISABLE_FATAL_ERROR_HANDLER', true );

Filtro

Usa wp_fatal_error_handler_enabledfiltro bool:

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

Appunti

Vedi biglietto n. 44458

Il wp_fatal_error_handler_enabledfiltro sovrascriverà il valore della WP_DISABLE_FATAL_ERROR_HANDLERcostante.

Fai anche attenzione a una possibile confusione booleana con la disabilitazione costante ma l' abilitazione del filtro .

Nel mio test l'approccio del filtro, come plug -in da non usare , non funziona come previsto, quindi sto usando la costante. Spero di poter approfondire ulteriormente questo aspetto.

Si può anche aggiungere un file drop-in personalizzatofatal-error-handler.php nella wp-contentdirectory ( src ), per sovrascrivere la WP_Fatal_Error_Handlerclasse secondo necessità. Dobbiamo usare un nome di classe diverso e deve definire il handle()metodo come funzione di arresto registrata .

Un semplice esempio per disabilitarlo sarebbe quello di sovrascrivere la classe del gestore degli errori predefinita con una classe personalizzata che non fa nulla:

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

Anche la classe anonima in PHP 7+ sembra funzionare:

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

Potrebbe anche estendere la WP_Fatal_Error_Handlerclasse predefinita , se necessario.

Poi c'è la WP_SANDBOX_SCRAPINGcostante. Vedi # 46045

L'impostazione WP_DEBUGcome vero non disabiliterà la protezione WSOD. Questo è di progettazione. Vedi # 46825

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.