Heim >Backend-Entwicklung >PHP-Tutorial >Erfahrungsaustausch zur PHP-Fehlerbehandlung

Erfahrungsaustausch zur PHP-Fehlerbehandlung

高洛峰
高洛峰Original
2016-11-30 13:25:281037Durchsuche

Dieses Tutorial behandelt einige der wichtigsten Fehlererkennungsmethoden in PHP.

Wir erklären Ihnen verschiedene Fehlerbehandlungsmethoden:

Einfache „die()“-Anweisung
Benutzerdefinierte Fehler und Fehlerauslöser
Fehlerberichterstattung
Grundlegende Fehlerbehandlung: Verwenden die die()-Funktion
Das erste Beispiel zeigt ein einfaches Skript zum Öffnen einer Textdatei:
Kopieren Sie den Code. Der Code lautet wie folgt:
$file=fopen(" willkommen .txt","r");
?>

Wenn die Datei nicht existiert, erhalten Sie eine Fehlermeldung wie diese:

Warnung: fopen(welcome.txt) [ function.fopen]: Stream konnte nicht geöffnet werden:
Keine solche Datei oder kein solches Verzeichnis in C:webfoldertest.php in Zeile 2 Um zu vermeiden, dass Benutzer Fehlermeldungen wie die oben beschriebene erhalten, prüfen wir, ob die Datei existiert, bevor wir darauf zugreifen:
Code kopieren Der Code lautet wie folgt:
if(!file_exists("welcome.txt"))
{
die("Datei nicht gefunden"); 🎜>}
else
{
$file=fopen("welcome.txt","r");
?> Wenn die Datei nicht existiert, erhalten Sie eine Fehlermeldung wie diese:

Datei nicht gefunden. Der obige Code ist effizienter als der vorherige Code, da er einen einfachen Fehlerbehandlungsmechanismus verwendet, um das Skript nach dem Fehler zu beenden.

Allerdings ist es nicht immer sinnvoll, das Skript einfach zu beenden. Sehen wir uns alternative PHP-Funktionen zur Fehlerbehandlung an.
Erstellen Sie einen benutzerdefinierten Fehlerhandler
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)



Fehlermeldeebene

Erfahrungsaustausch zur PHP-FehlerbehandlungDiese Fehlermeldeebenen sind Fehler Handler sind für die Behandlung verschiedener Fehlertypen konzipiert:

Jetzt erstellen wir eine Funktion zur Fehlerbehandlung:
Code kopieren Der Code lautet wie folgt:
function customError($errno, $errstr)
{
echo "Error :< ;/b> [$errno] $errstr
";
echo "Ending Script";
die();
}

Der obige Code ist ein einfache Fehlerbehandlungsfunktion. Wenn es ausgelöst wird, erhält es die Fehlerstufe und die Fehlermeldung. Anschließend werden die Fehlerstufe und die Fehlermeldung ausgegeben und das Skript beendet.

Da wir nun eine Fehlerbehandlungsfunktion erstellt haben, müssen wir bestimmen, wann die Funktion ausgelöst werden soll.
Fehlerbehandler festlegen
Der Standard-Fehlerbehandler von PHP ist der integrierte Fehlerbehandler. 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, erfordert set_error_handler( ) nur ein Argument kann ein zweites Argument hinzugefügt werden, um die Fehlerstufe anzugeben.

Beispiel
Testen Sie diesen Fehlerhandler, indem Sie versuchen, eine Variable auszugeben, die nicht existiert:
Code kopieren Der Code lautet wie folgt:
//error handler function
function customError($errno, $errstr)
{
echo "Error: [$errno] $errstr"; >// Fehlerhandler festlegen
set_error_handler("customError");

//trigger error
echo($test);

Die Ausgabe von Der obige Code sollte ähnlich sein:

Fehler: [8] Undefinierte Variable: Test löst einen Fehler aus
Wenn der Benutzer Daten in das Skript eingibt, ist es nützlich, bei der Eingabe des Benutzers einen Fehler auszulösen ist ungültig. 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:
Kopieren Sie den Code. Der Code lautet wie folgt:
php
$test =2;
if ($test>1)
{
trigger_error("Wert muss 1 oder kleiner sein"}
?> >
Der obige Code Die Ausgabe sollte wie folgt aussehen:

Hinweis: Der Wert muss 1 oder kleiner sein
in C:webfoldertest.php in Zeile 6 Sie können den Fehler an einer beliebigen Stelle im Skript 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:
Code kopieren Der Code lautet wie folgt:
//error handler function
function customError($errno , $errstr)
{
echo "Error: [$errno] $errstr
";
die ();
}

//set_error_handler("customError",E_USER_WARNING);

//trigger error
$test=2; >if ($test>1)
{
trigger_error("Wert muss 1 oder kleiner sein",E_USER_WARNING)
?> Code sollte etwa so aussehen:

Fehler: [512] Wert muss 1 oder kleiner sein
Endskript Nachdem wir nun gelernt haben, wie wir unsere eigenen Fehler erstellen und diese bestrafen, nehmen wir einen Schauen Sie sich die Fehlerprotokollierung an.
Fehlerprotokollierung
Standardmäßig sendet PHP Fehlerdatensätze entsprechend der error_log-Konfiguration in php.ini an das Fehlerprotokollierungssystem oder die Fehlerdatei des Servers. Mit der Funktion error_log() können Sie ein Fehlerprotokoll an eine angegebene Datei oder ein Remote-Ziel senden.

Das Senden einer Fehlermeldung per E-Mail ist eine gute Möglichkeit, über einen bestimmten Fehler benachrichtigt zu werden.

Fehlermeldung per E-Mail senden
Wenn im folgenden Beispiel ein bestimmter Fehler auftritt, senden wir eine E-Mail mit einer Fehlermeldung und beenden das Skript:
Code kopieren Der Code lautet wie folgt:
//Fehlerhandlerfunktion
function customError($errno, $errstr)
{
echo "Fehler: [$errno] $errstr
";
echo "Webmaster wurde benachrichtigt"; $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("Wert muss 1 oder kleiner sein" ,E_USER_WARNING);
}
?> 🎜>Webmaster hat Die E-Mail, die er mit dem obigen Code erhalten hat, wurde ähnlich wie folgt benachrichtigt:

Fehler: [512] Der Wert muss 1 oder niedriger sein. Diese Methode ist nicht für alle Fehler geeignet. Allgemeine Fehler sollten mit dem standardmäßigen PHP-Protokollierungssystem auf dem Server protokolliert werden.

Fehler-Backtrace


Definition und Verwendung
Die PHP-Funktion debug_backtrace() generiert einen Backtrace.

Diese Funktion gibt ein assoziatives Array zurück. Die folgenden Elemente können zurückgegeben werden:




Syntax
debug_backtrace()-Beispiel

Code kopieren Der Code lautet wie folgt:

php Erfahrungsaustausch zur PHP-FehlerbehandlungFunktion eins ($str1, $str2)

{

zwei("Glenn", "Quagmire");
Funktion zwei($str1, $str2)
{
drei( "Cleveland", "Brown");
}
Funktion drei($str1, $str2)
{
print_r(debug_backtrace()}

eins ("Peter", "Griffin");

Ausgabe:

Array
(
[0] => Array
(
[file] => C:webfoldertest.php
[line] => 7
[function] => three
[args] => Array
(
[0] => Cleveland
[1] => Brown
)
[1] => Array
[Datei] => C : webfoldertest.php
[line] => 3
[function] => two
[args] => Array
(
[0] => Glenn
[1] => Quagmire
)
)
[2] => Array
(
[file] => C:webfoldertest.php
[line] = > 14
[function] => one
[args] => Array
(
[0] => Peter
[1] => Griffin
)
)
)

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