PHP-Fehlermeldungen sind für den Entwickler von außergewöhnlich großem Nutzen: Sie verraten, sofern nicht bewusst ausgeschaltet, in welcher Datei ein bestimmter Fehler aufgetreten ist. Auch die betroffene Zeile des Quellcodes erscheint in der Meldung.
Fehler abfangen
PHP-Fehlermeldungen können nur dann wirklich hilfreich sein, wenn der Programmierer sie auch zu Gesicht bekommt, um nach der Ursache zu forschen. Was ist aber, wenn die Mitteilung dem Besucher der Website präsentiert und die Ausführung des angeforderten Skriptes gestoppt wird, weil zum Beispiel die Datenbank nicht erreichbar ist oder ein Fehlverhalten im Script selbst vorliegt? Imageschädigend und peinlich – der Erzeuger der Anwendung kriegt die Panne gar nicht mit. An dieser Stelle springt das sogenannte „Error Handling“ ein.
Was steckt dahinter?
Das Prinzip der „Error Handler“ ist folgendermaßen aufgebaut. Wird beim Ausführen eines Skriptes ein Fehler entdeckt, ruft PHP eine zuvor definierte Funktion auf. Beim Aufruf werden bestimmte Werte übergeben, die weiterverarbeitet werden können. Die aufgerufene Funktion verschickt eine Email mit übergebenen Parametern an den Entwickler. Das Prinzip ist recht einfach, übersichtlich und modular.
Umsetzung
Mit dem Befehl set_error_handler(“getErrorHandler”); wird festgelegt, welche Funktion im Falle eines Fehlers angesprochen werden soll. Dabei ist zu beachten, diesen Aufruf zusammen mit der Funktion selbst, die unten noch ausführlicher beschrieben wird, möglichst in ersten Zeilen des Skriptes zu platzieren, damit die Fehlerroutine gleich nach dem Start die Überwachung übernimmt. Die Funktion set_error_handler() wird erst seit PHP 4.0.1 unterstützt.
Die eigentliche Funktion muss auf jeden Fall vor dem oben erwähnten set_error_handler-Aufruf deklariert werden. Sie können Sie entweder einfach davor einfügen oder, was viel eleganter ist, die Funktion zuvor „includen“. Der Grund ist eindeutig und klar: Eine Funktion muss bereits existieren, bevor sie angesprochen werden kann. Die Funktion könnte wie folgt lauten:
function getErrorHandler($errno,$errmsg,$filename,$linenum) {
$error = “Zeit: ” .date(“Y-m-d H:i:s”). “n”;
$error .= “Meldung: ” .$errmsg. “n”;
$error .= “Datei: ” .$filename. “n”;
$error .= “Zeile: ” .$linenum;
mail(“Entwickler<entwickler@domain.tld>”, “Skript-Fehler aufgetreten”, $error, “From: Entwickler<entwickler@domain.tld>”);
}
Es werden wichtige Parameter, Fehlertyp, Fehlermeldung, Name der fehlerhaften Datei und die entsprechende Zeile, an die Funktion übergeben, die dann mit einem Kommentar versehen und an den Zuständigen verschickt werden. Ab sofort bekommt der Entwickler, nach Wunsch auch ein ganzes Entwicklungsteam, jeden Fehler auf der Website mit.
Weitere Anregungen
Natürlich kann die oben beschriebene Funktion beliebig und sinnvoll erweitert werden. So kann die Mitteilung an weitere Empfänger gerichtet werden. Auch können zusätzliche Informationen, wie zum Beispiel der Referer, übermittelt werden. Zudem kann man bestimmte Fehlertypen ausschließen.
Links zum Thema:
PHP Handbuch – Error Handling and Logging Functions
(Gast | 15.06.03)



Gute Möglichkeit, ;-)
denn als Entwickler kann man sich gar nicht alle Fehler ausdenken (& durchspielen & beseitigen), die der nächste DAU dann macht ;D
Nachteil dieser Methode, tritt wirklich mal ein Fehler auf, bekommt man bei 1000 Besucher auch 1000 Emails. Und das verbraucht natürlich zusätzlich Ressourcen, und man hat einen vollen Emailkasten (Ok, bei den meisten wird es wohl gefiltert, wenn 1000 Emails von dem gleichen Absender kommen).
Ist besser als gar keine ;)
Im ernst: Man kann die Funktion auch erweitern, in dem man einem Fehler eine Nummer vergibt und diese dann in die Datenbank mit einem Flag abspeichert. Vor dem Versenden der E-Mail wird geprüft, ob ein Fehler mit gleichen Parametern schon gemeldet wurde oder nicht…
Es ist nur eine der vielen Möglichkeiten (L)
Ich denke der Artikel gibt einen guten Einblick in die Möglichkeiten. Weitere Variationen liegen ganz in der Hand des jenigen, der diese Anregungen umsetzt. ;-)
Ja, in der Tat gibt es viele Möglichkeiten. Ich nutze selbst teilweise die Flag – Variante. Eine geeignete Fehlerkontrolle sollte man auf jeden Fall einbauen, egal welche spezielle Methode man nutzt.
Wer glaubt, die User benachrichtigen einen, wenn was nicht funktioniert, ist wohl sehr naiv ;)
>> Wer glaubt, die User benachrichtigen einen, wenn was nicht funktioniert, ist wohl sehr naiv
Deine Meinung teile ich auch, Michael – genau aus diesem Grund setze ich ErrorHandling in all meinen Projekten ein, auch “geschäftlich”…
Zunächst einmal Glückwunsch zu diesem sehr ausführlichen und gelungenem Artikel. Planst du eine Forsetzung? Wäre schon, dann könntest du nämlich auch auf das Errorhandlung bei MySQL-Aktionen eingehen, das habe ich mir neulich erklären lassen und es wäre super, wenn ich das irgendwann auch mal schwarz auf weiß hätte :-)
Jonas