PHP-Fehlerbehandlung
In PHP ist die Standard-Fehlerbehandlung sehr einfach. Eine Fehlermeldung wird an den Browser, die Nachricht mit dem Dateinamen, die Zeilennummer und eine Beschreibung der Fehlermeldung gesendet.
PHP-Fehlerbehandlung
Wenn Skripte und Web-Anwendungen zu erstellen, die Fehlerbehandlung ist ein wichtiger Bestandteil. Wenn Ihr Code Fehlerprüfung Code fehlt, kann Ihr Programm sehen sehr unprofessionell, sondern öffnet auch die Tür zu Sicherheitsrisiken.
Dieses Tutorial stellt einige der wichtigsten in PHP Fehlererkennungsverfahren.
Wir werden Ihre verschiedenen Fehlerbehandlung Methoden erklären:
- Simple "die ()" Erklärung
- Individuelle Fehler und Fehler-Trigger
- Fehlerberichterstattung
Grundfehlerbehandlung: Mit der Funktion die ()
Das erste Beispiel zeigt ein einfaches Skript, das eine Textdatei öffnet sich:
<?php $file=fopen("welcome.txt","r"); ?>
Wenn die Datei nicht existiert, wird ein Fehler wie diese:
Warning: fopen(welcome.txt) [function.fopen]: failed to open stream: No such file or directory in /www/w3big/test/test.php on line 2
Damit Benutzer bekommen eine Fehlermeldung ähnlich der oben untersuchten wir die Datei vor dem Zugriff auf die Datei vorhanden ist:
<?php if(!file_exists("welcome.txt")) { die("文件不存在"); } else { $file=fopen("welcome.txt","r"); } ?>
Nun, wenn die Datei nicht existiert, werden Sie diese Fehlermeldung ähnelt:
文件不存在
Im Vergleich zum vorherigen Code ist der Code über effizienter, da es eine einfache Fehlerbehandlung Mechanismus verwendet das Skript nach dem Fehler zu beenden.
Allerdings kündigen einfach das Skript nicht immer der richtige Weg ist. Lassen Sie uns für den Umgang mit Fehlern bei alternativen PHP-Funktionen zu suchen.
Erstellen eines Fehler Benutzerdefinierte Handler
Erstellen Sie einen Handler benutzerdefinierten Fehler ist ganz einfach. Wir erstellen Sie einfach eine spezielle Funktion, die aufgerufen werden kann, wenn ein Fehler in PHP auftritt.
Diese Funktion muss mindestens zwei Parameter Handling (Fehlerebene und Fehlermeldung) in der Lage sein, kann aber bis zu fünf Parameter akzeptieren bis (optional: Datei, Zeilennummer und Fehlerkontext):
Grammatik
error_function(error_level,error_message, error_file,error_line,error_context)
Parameter | Beschreibung |
---|---|
error_level | Erforderlich. Fehler wird als benutzerdefinierte Fehlerberichterstattung Ebene definiert. Es muss eine Zahl sein. Siehe folgende Tabelle: Fehlerberichtsebene. |
error_message | Erforderlich. Benutzerdefinierte Fehlerfehlermeldung angegeben. |
error_file | Optional. Dateiname angegeben Fehler aufgetreten ist. |
ERROR_LINE | Optional. Vorgegebene Zeilennummer der Fehler aufgetreten ist. |
error_context | Optional. jede Variable Gibt ein Array mit, wenn ein Fehler in der Anwendung und ihre Werte auftritt. |
Fehlerberichtsebene
Diese Fehlerberichtsebenen sind die verschiedenen Arten von Fehlern Handler benutzerdefinierte Verarbeitung Fehler:
值 | 常量 | 描述 |
---|---|---|
2 | E_WARNING | 非致命的 run-time 错误。不暂停脚本执行。 |
8 | E_NOTICE | run-time 通知。在脚本发现可能有错误时发生,但也可能在脚本正常运行时发生。 |
256 | E_USER_ERROR | 致命的用户生成的错误。这类似于程序员使用 PHP 函数 trigger_error() 设置的 E_ERROR。 |
512 | E_USER_WARNING | 非致命的用户生成的警告。这类似于程序员使用 PHP 函数 trigger_error() 设置的 E_WARNING。 |
1024 | E_USER_NOTICE | 用户生成的通知。这类似于程序员使用 PHP 函数 trigger_error() 设置的 E_NOTICE。 |
4096 | E_RECOVERABLE_ERROR | 可捕获的致命错误。类似 E_ERROR,但可被用户定义的处理程序捕获。(参见 set_error_handler()) |
8191 | E_ALL | 所有错误和警告。(在 PHP 5.4 中,E_STRICT 成为 E_ALL 的一部分) |
Lassen Sie uns nun eine Funktion erstellen, Fehler zu behandeln:
function customError($errno, $errstr) { echo "<b>Error:</b> [$errno] $errstr<br>"; echo "脚本结束"; die(); }
Der obige Code ist eine einfache Fehlerbehandlung Funktion. Wenn es ausgelöst wird, wird die Fehlerstufe und Fehlermeldungen. Es gibt dann die Fehlerstufe und die Nachricht und beendet das Skript.
Jetzt haben wir eine Fehlerbehandlung Funktion erstellt haben, müssen wir zu bestimmen, wann die Funktion auszulösen.
Einstellen Fehlerbehandlung
PHP-Standardfehlerhandler ist eine integrierte Fehlerhandler. Wir werden die Funktion über dem Standardfehlerbehandlungsdauer des Skripts zu transformieren.
Sie können die Fehlerbehandlungsroutine zu ändern, so dass sie nur bis zu einem gewissen Fehler angewendet, so kann das Skript verschiedene Möglichkeiten, um verschiedene Fehler behandeln. Doch in diesem Fall wollen wir für alle Fehler Error Handler unsere eigene zu verwenden:
set_error_handler("customError");
Da wir unsere eigene Funktion, um alle Fehler zu behandeln wollen, set_error_handler () nur einen Parameter benötigt, können Sie ein zweites Argument hinzufügen, um eine Fehlerstufe angeben.
Beispiele
Durch die Ausgangsgröße versucht, die nicht existiert, die Fehlerbehandlung zu testen:
<?php // 错误处理函数 function customError($errno, $errstr) { echo "<b>Error:</b> [$errno] $errstr"; } // 设置错误处理函数 set_error_handler("customError"); // 触发错误 echo($test); ?>
Die Ausgabe des Codes ist oben, wie folgt:
Error: [8] Undefined variable: test
Trigger-Fehler
Im Skript der Benutzer eingegebenen Ortsdaten, wenn die Benutzereingabe nicht ausgelöst wird, wenn ein Fehler nützlich ist. In PHP, dies wird durch die trigger_error () -Funktion erfolgen abzuschließen.
Beispiele
In diesem Beispiel, wenn die "Test" Variable größer als "1" ist, tritt ein Fehler auf:
<?php $test=2; if ($test>1) { trigger_error("变量值必须小于等于 1"); } ?>
Die Ausgabe des Codes ist oben, wie folgt:
Notice: 变量值必须小于等于 1 in /www/test/w3big.php on line 5
Sie können einen Fehler im Script an beliebiger Stelle auslösen, durch einen zweiten Parameter hinzufügen, können Sie die Fehlerstufe angeben ausgelöst wird.
Mögliche Arten von Fehlern:
- E_USER_ERROR - Fatal Laufzeitfehler vom Benutzer generiert. Nicht behebbarer Fehler. Skriptausführung wird unterbrochen.
- E_USER_WARNING - Nicht fatal nutzergenerierten Laufzeitwarnung. Skriptausführung wird nicht unterbrochen.
- E_USER_NOTICE - default. Nutzergenerierte Laufzeit kündigen. Wenn das Skript zu finden kann ein Fehler auftreten, kann aber auch im normalen Betrieb Skript auftreten.
Beispiele
In diesem Beispiel, wenn die "Test" Variable größer als "1" ist, tritt E_USER_WARNING Fehler. Wenn dies E_USER_WARNING geschieht, werden wir unsere eigene Fehlerbehandlung verwenden und das Skript zu beenden:
<?php // 错误处理函数 function customError($errno, $errstr) { echo "<b>Error:</b> [$errno] $errstr<br>"; echo "脚本结束"; die(); } // 设置错误处理函数 set_error_handler("customError",E_USER_WARNING); // 触发错误 $test=2; if ($test>1) { trigger_error("变量值必须小于等于 1",E_USER_WARNING); } ?>
Die Ausgabe des Codes ist oben, wie folgt:
Error: [512] 变量值必须小于等于 1 脚本结束
Nun, da wir gelernt, wie Sie Ihre eigenen Fehler zu erstellen, und wie man sie auslösen, lassen Sie uns auf das Fehlerprotokoll zu suchen.
Fehlerprotokoll
Im Falle des Verzuges nach der error_log-Konfiguration in der php.ini gesetzt ist, sendet PHP einen Fehler Aufzeichnungssystem zur Aufzeichnung oder Dateiserver. Durch die Verwendung der error_log () Funktion, die Sie Fehlerprotokolle in eine bestimmte Datei oder einem Remote-Ziel senden kann.
Es sendet eine Fehlermeldung an, sich per E-Mail ist eine gute Möglichkeit benachrichtigt bestimmte Fehler zu bekommen.
Fehlermeldung wird per E-Mail gesendet
Im folgenden Beispiel, wenn ein bestimmter Fehler auftritt, werden wir eine E-Mail mit einer Fehlermeldung und beenden Sie das Skript senden:
<?php // 错误处理函数 function customError($errno, $errstr) { echo "<b>Error:</b> [$errno] $errstr<br>"; echo "已通知网站管理员"; error_log("Error: [$errno] $errstr",1, "[email protected]","From: [email protected]"); } // 设置错误处理函数 set_error_handler("customError",E_USER_WARNING); // 触发错误 $test=2; if ($test>1) { trigger_error("变量值必须小于等于 1",E_USER_WARNING); } ?>
Die Ausgabe des Codes ist oben, wie folgt:
Error: [512] 变量值必须小于等于 1 已通知网站管理员
Nachrichten aus dem obigen Code empfangen wird, wie folgt:
Error: [512] 变量值必须小于等于 1
Diese Methode ist für alle Fehler nicht geeignet. Herkömmliche Fehler sollte für die Aufzeichnung auf dem Server unter Verwendung des Standard-PHP-Logging-System sein.