Heim  >  Artikel  >  Backend-Entwicklung  >  Benutzerdefinierte PHP-Fehlerbehandlung

Benutzerdefinierte PHP-Fehlerbehandlung

小云云
小云云Original
2017-11-15 16:33:282098Durchsuche

Normalerweise gibt PHP den schwerwiegenden Fehler direkt aus und gibt die Fehlerquelle (Dateiadresse, Zeilennummer) und den Grund usw. aus, sodass Entwickler das Problem leicht lokalisieren können. Manchmal werden diese Informationen jedoch aufgrund von php.ini-Einstellungen oder Konfigurationsproblemen mit dem Framework eines Drittanbieters nicht ausgegeben. Zu diesem Zeitpunkt müssen Sie lernen, relevante Parameter selbst festzulegen und diese Fehlermeldungen auszugeben, um das Problem schnell zu lokalisieren.

error_reporting ist ein globaler PHP-Konfigurationsparameter in php.ini. Wird zum Konfigurieren des Fehlerausgabepegels verwendet und kann zum Festlegen des Fehlerausgabepegels verwendet werden.

error_reporting(int $level): Wenn $level 0 ist, ist die Fehlerausgabe deaktiviert, d. h. es werden keine Fehler ausgegeben.

set_error_handler

PHPs standardmäßige Fehlerbehandlung besteht darin, die Nachricht auszugeben. Manchmal müssen Sie jedoch andere Vorgänge definieren. In diesem Fall müssen Sie die Fehlerbehandlungsfunktion anpassen.

php bietet die integrierte Funktion set_error_handler, die uns bei der Registrierung unserer eigenen Fehlerbehandlungsfunktionen hilft. Der Funktionsprototyp lautet wie folgt:

mixed set_error_handler ( callback $error_handler [, int $error_types = E_ALL | E_STRICT ] )

Es ist erwähnenswert, dass selbst wenn die Fehlerbehandlungsfunktion registriert ist, Das Standardverhalten ist weiterhin: Bei der Ausführung wird die Fehlermeldung weiterhin ausgegeben, wenn ein Fehler auftritt. Sie müssen daher die Fehlerstufe im Programm explizit auf 0 setzen und dann Ihre eigene Fehlerbehandlungsfunktion registrieren. Dieser Ansatz ist in einer Produktionsumgebung besonders wichtig, denn selbst wenn etwas schief geht, werden vertrauliche interne Fehlerinformationen nicht potenziell böswilligen Benutzern zugänglich gemacht. Es ist auch wichtig darauf hinzuweisen, dass benutzerdefinierte Fehlerbehandlungsfunktionen keine schwerwiegenden Fehler (z. B. Kompilierungsfehler) behandeln können.

Das Folgende ist ein Beispiel für die Verwendung einer benutzerdefinierten Fehlerbehandlungsfunktion:

<?php
error_reporting(0);
function error_handler($error_level, $error_message, $file, $line) {
    $exit = false;
    switch ($error_level) {
        case E_NOTICE:
        case E_USER_NOTICE:
            $error_type = &#39;Notice&#39;;
            break;
        case E_WARNING:
        case E_USER_WARNING:
            $error_type = &#39;Warning&#39;;
            break;
        case E_ERROR:
        case E_USER_ERROR:
            $error_type = &#39;Fatal Error&#39;;
            $exit = true;
            break;
        default:
            $error_type = &#39;Unknown&#39;;
            $exit = true;
            break;
    }
    printf("%s: %s in %s on line %d\n", $error_type, $error_message, $file, $line);
    if ($exit) {
        die();
    }
}
set_error_handler(&#39;error_handler&#39;);

echo $novar;
echo 3 / 0;
trigger_error('Einen schwerwiegenden Fehler auslösen ' , E_USER_ERROR);
new NonExist();

Das Ausführen dieses Skripts erhält die folgende Ausgabe:

Hinweis: Undefinierte Variable: novar in /your/php_demo_file.php in Zeile 40

Warnung: Division durch Null in /your/php_demo_file.php in Zeile 41

Schwerwiegender Fehler: Löst einen schwerwiegenden Fehler in /your/php_demo_file.php in Zeile 42 aus

Okay, sehen Sie, die letzte „new NoExistClass()“-Ausnahme wurde von der benutzerdefinierten Fehlerbehandlungsfunktion nicht abgefangen.

Set_Exception_handler registriert übrigens die Ausnahmebehandlung der obersten Ebene. In Webanwendungen können Sie diese festlegen und dann einheitlich zur Fehlerbehandlungsseite springen.

Das Obige ist ein Fall der benutzerdefinierten PHP-Fehlerbehandlung. Ich hoffe, es kann allen helfen.

Verwandte Empfehlungen:

Ein Fall einer benutzerdefinierten PHP-Funktion, die eine Array-Vergleichsfunktion implementiert

Beispiel für einen PHP-Benutzerdefinierten/System-/Klassen-Konstantencode. Detaillierte Beschreibung Erklärung

Detaillierte Erläuterung der Codebeispiele für benutzerdefinierte PHP-/System-/Klassenkonstanten

Das obige ist der detaillierte Inhalt vonBenutzerdefinierte PHP-Fehlerbehandlung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn