Wie deaktiviere ich den WSOD-Schutz (Fatal Error)?

12

Die schwerwiegende Fehlerbehandlung wurde in WordPress 5.1 und 5.2 eingeführt.

Es wird manchmal als WSOD-Schutz (White Screen Of Death) bezeichnet.

Wenn wir an dev / local-Installationen arbeiten, möchten wir manchmal in der Lage sein, die Sites nach Bedarf zu unterbrechen und z. B. den E-Mail-Wiederherstellungsprozess für die Site zu vermeiden, wenn Sie innerhalb eines geschützten Endpunkts arbeiten (siehe is_protected_endpoint()):

Die Website hat technische Schwierigkeiten. Anweisungen finden Sie im E-Mail-Posteingang Ihres Site-Administrators.

Wie können wir die schwerwiegende Fehlerbehandlung deaktivieren?

Birgire
quelle

Antworten:

15

Wir können die Bool- Ausgabe der wp_is_fatal_error_handler_enabled()Funktion auf zwei Arten ändern :

Konstante

Setzen Sie die WP_DISABLE_FATAL_ERROR_HANDLERKonstante auf trueinnerhalb der wp-config.phpDatei:

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

oder

define( 'WP_DISABLE_FATAL_ERROR_HANDLER', true );

Filter

Verwenden Sie den wp_fatal_error_handler_enabledBool-Filter:

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

Anmerkungen

Siehe Ticket Nr. 44458

Der wp_fatal_error_handler_enabledFilter überschreibt den Wert der WP_DISABLE_FATAL_ERROR_HANDLERKonstante.

Achten Sie auch auf eine mögliche Verwechslung mit der ständigen Deaktivierung, aber der Filteraktivierung .

In meinen Tests funktioniert der Filteransatz als Plugin, das unbedingt verwendet werden muss , nicht wie erwartet, daher verwende ich stattdessen die Konstante. Hoffentlich kann ich das weiter untersuchen.

Sie können dem Verzeichnis ( src ) auch eine benutzerdefinierte Drop-In- Datei hinzufügen , um die Klasse nach Bedarf zu überschreiben . Wir müssen einen anderen Klassennamen verwenden und die Methode als registrierte Abschaltfunktion definieren .fatal-error-handler.phpwp-contentWP_Fatal_Error_Handlerhandle()

Ein einfaches Beispiel zum Deaktivieren wäre das Überschreiben der Standardfehlerbehandlungsklasse mit einer benutzerdefinierten Klasse, die nichts bewirkt:

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

Die anonyme Klasse in PHP 7+ scheint ebenfalls zu funktionieren:

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

WP_Fatal_Error_HandlerBei Bedarf kann auch die Standardklasse erweitert werden.

Dann ist da noch die WP_SANDBOX_SCRAPINGKonstante. Siehe # 46045

Wenn Sie den Wert auf WP_DEBUGtrue setzen, wird der WSOD-Schutz nicht deaktiviert. Dies ist beabsichtigt. Siehe # 46825

Birgire
quelle