PHP-Fehlerbehandlung
Manchmal läuft Ihre Anwendung nicht so, wie sie soll, was zu einem Fehler führt. Es gibt eine Reihe von Gründen, die zu Fehlern führen können, zum Beispiel:
Auf dem Webserver ist möglicherweise kein Speicherplatz mehr vorhanden Ein Benutzer hat möglicherweise einen ungültigen Wert in ein Formularfeld eingegeben Die Datei oder der Datenbankdatensatz, auf den Sie zugreifen wollten, existiert möglicherweise nicht. Die Anwendung hat möglicherweise keine Berechtigung, in eine Datei auf der Festplatte zu schreiben. Ein Dienst, auf den die Anwendung zugreifen muss, ist möglicherweise vorübergehend nicht verfügbar. Diese Arten von Fehlern werden als Laufzeitfehler bezeichnet, da sie zum Zeitpunkt der Ausführung des Skripts auftreten. Sie unterscheiden sich von Syntaxfehlern, die behoben werden müssen, bevor das Skript ausgeführt werden kann.
Eine professionelle Anwendung muss in der Lage sein, solche Laufzeitfehler elegant zu behandeln. Normalerweise bedeutet dies, dass der Benutzer klarer und präziser über das Problem informiert wird.
Verstehen der Fehlerstufen
Wenn ein Problem auftritt, das verhindert, dass ein Skript ordnungsgemäß ausgeführt wird, löst die PHP-Engine normalerweise einen Fehler aus. Jeder Fehler wird durch einen Integer-Wert und eine zugehörige Konstante dargestellt. In der folgenden Tabelle sind einige der üblichen Fehlerstufen aufgeführt:
Die PHP-Engine löst einen Fehler aus, wenn sie auf ein Problem mit Ihrem Skript stößt, aber Sie können auch selbst Fehler auslösen, um benutzerfreundlichere Fehlermeldungen zu erzeugen. Auf diese Weise können Sie Ihre Anwendung anspruchsvoller gestalten. Der folgende Abschnitt beschreibt einige gängige Methoden zur Fehlerbehandlung in PHP:
Grundlegende Fehlerbehandlung mit der Funktion die()
<?php // Try to open a non-existent file
$file = fopen("sample.txt", "r");
?>
Wenn die Datei nicht existiert, erhalten Sie möglicherweise eine Fehlermeldung wie diese: Warning: fopen(sample.txt) [function.fopen]: failed to open stream: No such file or directory in C:\wamp\www\project\test.php in Zeile 2
Wenn wir einige einfache Schritte befolgen, können wir verhindern, dass die Benutzer solche Fehlermeldungen erhalten:
<?php
if(file_exists("sample.txt")){
$file = fopen("sample.txt", "r");
} else{
die("Error: The file you are trying to access doesn't exist.");
}
?>
Wenn Sie nun das obige Skript ausführen, erhalten Sie die folgende Fehlermeldung: Fehler: Die Datei, auf die Sie zuzugreifen versuchen, existiert nicht.
Wie Sie sehen können, können wir durch die Implementierung einer einfachen Prüfung, ob die Datei existiert oder nicht, bevor wir versuchen, auf sie zuzugreifen, eine Fehlermeldung erzeugen, die für den Benutzer aussagekräftiger ist.
Die oben verwendete Funktion die() zeigt einfach die benutzerdefinierte Fehlermeldung an und beendet das aktuelle Skript, wenn die Datei "sample.txt" nicht gefunden wird.
Erstellen eines benutzerdefinierten Fehlerhandlers
Sie können Ihre eigene Fehlerbehandlungsfunktion erstellen, um mit den von der PHP-Engine erzeugten Laufzeitfehlern umzugehen. Die benutzerdefinierte Fehlerbehandlung bietet Ihnen mehr Flexibilität und eine bessere Kontrolle über die Fehler. Sie kann den Fehler untersuchen und entscheiden, was mit dem Fehler zu tun ist, z. B. eine Meldung an den Benutzer anzeigen, den Fehler in einer Datei oder Datenbank protokollieren oder per E-Mail versenden, versuchen, das Problem zu beheben und weiterzumachen, die Ausführung des Skripts beenden oder den Fehler ganz ignorieren.
Die benutzerdefinierte Fehlerbehandlungsfunktion muss mindestens zwei Parameter (errno und errstr) verarbeiten können, kann aber optional drei weitere Parameter (errfile, errline und errcontext) akzeptieren, wie unten beschrieben:
Hier ist ein Beispiel für eine einfache benutzerdefinierte Funktion zur Fehlerbehandlung. Dieser Handler, customError(), wird immer dann ausgelöst, wenn ein Fehler auftritt, egal wie trivial er ist. Er gibt dann die Details des Fehlers an den Browser aus und stoppt die Ausführung des Skripts.
<?php
// Error handler function
function customError($errno, $errstr){
echo "<b>Error:</b> [$errno] $errstr";
}
?>
Sie müssen PHP mitteilen, dass es Ihre benutzerdefinierte Fehlerbehandlungsfunktion verwenden soll - rufen Sie einfach die eingebaute Funktion set_error_handler() auf und geben Sie den Namen der Funktion an.
<?php
// Error handler function
function customError($errno, $errstr){
echo "<b>Error:</b> [$errno] $errstr";
}
// Set error handler
set_error_handler("customError");
// Trigger error
echo($test);
?>
Fehlerprotokollierung
Fehlermeldungen in einer Textdatei protokollieren
Sie können auch Details des Fehlers in der Protokolldatei protokollieren, etwa so:
<?php
function calcDivision($dividend, $divisor){
if($divisor == 0){
trigger_error("calcDivision(): The divisor cannot be zero", E_USER_WARNING);
return false;
} else{
return($dividend / $divisor);
}
}
function customError($errno, $errstr, $errfile, $errline, $errcontext){
$message = date("Y-m-d H:i:s - ");
$message .= "Error: [" . $errno ."], " . "$errstr in $errfile on line $errline, ";
$message .= "Variables:" . print_r($errcontext, true) . "\r\n";
error_log($message, 3, "logs/app_errors.log");
die("There was a problem, please try again.");
}
set_error_handler("customError");
echo calcDivision(10, 0);
echo "This will never be printed.";
?>
Einen Fehler auslösen
Die PHP-Engine löst zwar immer dann einen Fehler aus, wenn sie auf ein Problem mit Ihrem Skript stößt, Sie können jedoch auch selbst Fehler auslösen. Dies kann dazu beitragen, Ihre Anwendung robuster zu machen, da potenzielle Probleme erkannt werden können, bevor sie sich zu schwerwiegenden Fehlern entwickeln.
Um einen Fehler in Ihrem Skript auszulösen, rufen Sie die Funktion trigger_error() auf und übergeben die Fehlermeldung, die Sie generieren möchten:
trigger_error("There was a problem.");
Betrachten Sie die folgende Funktion, die die Division von zwei Zahlen berechnet.
<?php
function calcDivision($dividend, $divisor){
return($dividend / $divisor);
}
// Calling the function
echo calcDivision(10, 0);
?>
Wenn ein Wert von Null (0) als $divisor-Parameter übergeben wird, sieht der von der PHP-Engine erzeugte Fehler etwa so aus: Warnung: Division durch Null in C:\wamp\www\project\test.php in Zeile 3
Diese Nachricht scheint nicht sehr informativ zu sein. Betrachten Sie das folgende Beispiel, das die Funktion trigger_error() verwendet, um den Fehler zu erzeugen.
<?php
function calcDivision($dividend, $divisor){
if($divisor == 0){
trigger_error("The divisor cannot be zero", E_USER_WARNING);
return false;
} else{
return($dividend / $divisor);
}
}
// Calling the function
echo calcDivision(10, 0);
?>
Jetzt erzeugt das Skript diese Fehlermeldung: Warnung: Der Divisor kann nicht Null sein in C:\wamp\www\project\error.php in Zeile 4
Wie Sie sehen können, erklärt die Fehlermeldung des zweiten Beispiels das Problem deutlicher als die des vorherigen Beispiels.
1 Stimmen
coding.smashingmagazine.com/2011/11/30/
5 Stimmen
@JuannStrauss, Das ist noch untertrieben. Und wenn Sie schließlich siehe die Fehler, es heißt
T_PAAMAYIM_NEKUDOTAYIM
. Oder vielleicht "muss eine Instanz von integer sein, integer gegeben" .2 Stimmen
Anleitung dazu: code2real.blogspot.com/2015/06/
0 Stimmen
Wenn Sie einen Parse-Fehler haben, funktioniert bei vielen Webhosts nichts davon, und Sie haben möglicherweise keinen Zugriff auf die Fehlerprotokolle. Sie müssen php auf Ihrem lokalen Rechner installieren (XAMPP unter Windows usw.) und einen Synax-Check auf der Kommandozeile durchführen
php.exe -l <your file name>