Es ist unvermeidlich, dass bei der Programmierung ungewöhnliche Fehler auftreten. Was wir tun müssen, ist, Ausnahmen angemessen zu behandeln, damit sie von Benutzern nicht wahrgenommen werden. Heute werde ich eine Methode zum Anpassen von Ausnahmehandlern vorstellen.
Erstellen eines benutzerdefinierten Fehlerhandlers
Das Erstellen eines benutzerdefinierten Fehlerhandlers ist sehr einfach. Wir haben einfach eine dedizierte Funktion erstellt, die aufgerufen werden kann, wenn in PHP ein Fehler auftritt.
Die Funktion muss mindestens zwei Parameter (Fehlerstufe und Fehlermeldung) verarbeiten können, kann aber bis zu fünf Parameter akzeptieren (optional: Datei, Zeilennummer und Fehlerkontext):
Syntax
error_function(error_level,error_message,
error_file,error_line,error_context)
Parameterbeschreibung
error_level
Erforderlich. Gibt die Fehlerberichtsebene für benutzerdefinierte Fehler an. Muss ein Wert sein.
Siehe Tabelle unten: Fehlermeldestufen.
error_message Erforderlich. Gibt Fehlermeldungen für benutzerdefinierte Fehler an.
error_file Optional. Gibt den Namen der Datei an, in der der Fehler aufgetreten ist.
error_line Optional. Gibt die Zeilennummer an, in der der Fehler aufgetreten ist.
error_context Optional. Gibt ein Array an, das alle zum Zeitpunkt des Fehlers verwendeten Variablen und deren Werte enthält.
Fehlerberichtsebenen
Diese Fehlerberichtsebenen sind verschiedene Arten von Fehlern, die Fehlerhandler verarbeiten sollen:
Wertkonstante Beschreibung
2 E_WARNING Nicht schwerwiegend Laufzeitfehler. Unterbrechen Sie die Skriptausführung nicht.
8 E_NOTICE
Laufzeitbenachrichtigung.
Das Skript erkennt, dass möglicherweise ein Fehler auftritt, dieser kann jedoch auch auftreten, während das Skript normal ausgeführt wird.
256 E_USER_ERROR Schwerwiegender benutzergenerierter Fehler. Dies ähnelt E_ERROR, das der Programmierer mit der PHP-Funktion trigger_error() setzt.
512 E_USER_WARNING Nicht schwerwiegende, vom Benutzer generierte Warnung. Dies ähnelt der E_WARNING, die der Programmierer mit der PHP-Funktion trigger_error() setzt.
1024 E_USER_NOTICE Benutzergenerierte Benachrichtigung. Dies ähnelt E_NOTICE, das vom Programmierer mithilfe der PHP-Funktion trigger_error() festgelegt wird.
4096 E_RECOVERABLE_ERROR Abfangbarer schwerwiegender Fehler. Wie E_ERROR, kann aber von einem benutzerdefinierten Handler abgefangen werden. (Siehe set_error_handler())
8191 E_ALL
Alle Fehler und Warnungen, außer Ebene E_STRICT.
(In PHP 6.0 ist E_STRICT Teil von E_ALL)
Jetzt erstellen wir eine Funktion, die Fehler behandelt:
function customError($errno, $errstr) { echo "Error: [$errno] $errstr "; echo "Ending Script"; die(); }
Der obige Code ist eine einfache Fehlerbehandlung Funktion. Wenn es ausgelöst wird, erhält es die Fehlerstufe und die Fehlermeldung. Anschließend werden die Fehlerstufe und die Meldung ausgegeben und das Skript beendet.
Da wir nun eine Fehlerbehandlungsfunktion erstellt haben, müssen wir bestimmen, wann sie ausgelöst werden soll.
Fehlerhandler festlegen
Der Standard-Fehlerhandler von PHP ist der integrierte Fehlerhandler. Wir werden die obige Funktion in den Standard-Fehlerbehandler umwandeln, wenn das Skript ausgeführt wird.
Der Fehlerhandler kann so geändert werden, dass er nur für bestimmte Fehler gilt, sodass das Skript verschiedene Fehler auf unterschiedliche Weise behandeln kann. In diesem Fall verwenden wir jedoch unseren benutzerdefinierten Fehlerhandler für alle Fehler:
set_error_handler("customError");
Da wir möchten, dass unsere benutzerdefinierte Funktion alle Fehler behandelt, set_error_handler() erfordert nur einen Parameter, und ein zweiter Parameter kann hinzugefügt werden, um die Fehlerstufe anzugeben.
Beispiel
Testen Sie diesen Fehlerhandler, indem Sie versuchen, eine Variable auszugeben, die nicht existiert:
<?php //error handler function function customError($errno, $errstr) { echo "Error: [$errno] $errstr"; } //set error handler set_error_handler("customError"); //trigger error echo($test); ?>
Die Ausgabe des obigen Codes sollte wie folgt aussehen:
Fehler: [8] Undefinierte Variable: Test
Fehler auslösen
Wenn der Benutzer Daten in das Skript eingibt, ist es sinnvoll, einen Fehler auszulösen, wenn die Eingabe des Benutzers ungültig ist. In PHP wird diese Aufgabe durch trigger_error() erledigt.
Beispiel
Wenn in diesem Beispiel die Variable „test“ größer als „1“ ist, tritt ein Fehler auf:
$ test=2;
if ($test>1)
{
trigger_error("Wert muss 1 oder kleiner sein");
}
?>
Die Ausgabe des obigen Codes sollte etwa so aussehen:
Hinweis: Der Wert muss 1 oder kleiner sein
in C :webfoldertest.php in Zeile 6
Sie können an einer beliebigen Stelle im Skript einen Fehler auslösen. Durch Hinzufügen des zweiten Parameters können Sie die Fehlerstufe angeben, die ausgelöst wird.
Mögliche Fehlertypen:
E_USER_ERROR – Schwerwiegender, vom Benutzer generierter Laufzeitfehler. Der Fehler kann nicht behoben werden. Die Skriptausführung wurde unterbrochen.
E_USER_WARNING – Nicht schwerwiegende, vom Benutzer generierte Laufzeitwarnung. Die Skriptausführung wird nicht unterbrochen.
E_USER_NOTICE – Standard. Vom Benutzer generierte Laufzeitbenachrichtigungen. Das Skript hat einen möglichen Fehler gefunden, der möglicherweise während der normalen Ausführung des Skripts aufgetreten ist.
Beispiel
Wenn in diesem Beispiel die Variable „test“ größer als „1“ ist, tritt der Fehler E_USER_WARNING auf. Wenn E_USER_WARNING auftritt, verwenden wir unseren benutzerdefinierten Fehlerhandler und beenden das Skript:
1) { trigger_error("Value must be 1 or below",E_USER_WARNING); } ?>
Die Ausgabe des obigen Codes sollte wie folgt aussehen:
Fehler: [512] Wert muss sein 1 oder niedriger
Endskript
Da wir nun gelernt haben, wie wir unsere eigenen Fehler erstellen und auslösen können, werfen wir einen Blick auf die Fehlerprotokollierung.
Fehleraufzeichnung
默认地,根据在 php.ini 中的 error_log 配置,PHP 向服务器的错误记录系统或文件发送错误记录。通过使用 error_log() 函数,您可以向指定的文件或远程目的地发送错误记录。
通过电子邮件向您自己发送错误消息,是一种获得指定错误的通知的好办法。
通过 E-Mail 发送错误消息
在下面的例子中,如果特定的错误发生,我们将发送带有错误消息的电子邮件,并结束脚本:
<?php //error handler function function customError($errno, $errstr) { echo "Error: [$errno] $errstr "; echo "Webmaster has been notified"; error_log("Error: [$errno] $errstr",1, "someone@example.com","From: webmaster@example.com"); } //set error handler set_error_handler("customError",E_USER_WARNING); //trigger error $test=2; if ($test>1) { trigger_error("Value must be 1 or below",E_USER_WARNING); } ?>
以上代码的输出应该类似这样:
Error: [512] Value must be 1 or below
Webmaster has been notified
接收自以上代码的邮件类似这样:
Error: [512] Value must be 1 or below
这个方法不适合所有的错误。常规错误应当通过使用默认的 PHP 记录系统在服务器上进行记录。
相关推荐:
Das obige ist der detaillierte Inhalt vonAnpassung des PHP-Ausnahmehandlers. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!