Fehler in PHP abfangen
PHP-Fehlermeldungen sind für den Entwickler außergewöhnlich vom großen Nutzwert: Diese verraten, sofern nicht bewusst ausgeschaltet, in welcher Datei ein bestimmter Fehler aufgetreten ist. Auch die betroffene Zeile des Quellcodes erscheint in der Meldung.
Doch diese, in PHP fest eingebaute, Hilfe kann nur dann wirklich hilfreich sein, wenn der Programmierer sie auch zu Gesicht bekommt, um nach der Ursache zu forschen.
Imageschädigend und peinlich wird es dann, wenn der Website-Besucher den Fehler angezeigt bekommt und die Ausführung des angeforderten Skriptes gestoppt wird, weil zum Beispiel die Datenbank nicht erreichbar ist oder ein Fehlverhalten im Script selbst vorliegt. Schlimmer noch: Der Erzeuger der Anwendung kriegt die Panne gar nicht mit! An dieser Stelle spring “Error Handler” ein und warnt bei solch kritischen Situationen.
Was steckt dahinter?
Das Prinzip des Error Handlers in diesem Beispiel ist folgendermaßen aufgebaut:
Wird beim Parsen des Skriptes ein Fehler entdeckt, ruft PHP eine zuvor definierte Funktion auf
Es werden bestimmte Werte beim Aufruf übergeben, die weiterverarbeitet werden können
Aufgerufene Funktion verschickt eine E-Mail mit übergebenen Parametern an den Entwickler
Hört sich kompliziert an?
Und so sieht es in der Realität aus: einfach, übersichtlich und modular:
set_error_handler(”getErrorHandler”);
Mit diesem Befehl wird festgelegt, welche Funktion (um genauer zu sein, der Name dieser 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 Error Handler gleich nach dem Start die Überwachung übernimmt. Falls eine prepend-Datei eingesetzt wird, gehört der Funktionsaufruf also darein.
Die eigentliche Funktion. Diese muss auf jedem Fall vor dem oben erwähnten “set_error_handler”-Aufruf deklariert werden: 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. Hier kommt sie:
<?php
function getErrorHandler($errno, $errmsg, $filename, $linenum) {<br>
$error = “Zeit: ” .date(“Y-m-d H:i:s”). “n”;<br>
$error .= “Meldung: ” .$errmsg. “n”;<br>
$error .= “Datei: ” .$filename. “n”;<br>
$error .= “Zeile: ” .$linenum;<br>
mail(“Entwickler<entwickler@domain.tld>”, “Error @ domain.de”, $error, “From: Entwickler<entwickler@domain.tld>”);
}
?>Es werden wichtige Parameter wie 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 kriegt der Entwickler, nach Wunsch auch ein ganzes Entwicklungsteam, jeden Fehler auf der Website mit - auch dann, wenn er nicht mehr am Projekt arbeitet.
Gibt es etwas zu beachten?
Die Funktion “set_error_handler()” wird erst seit PHP 4.0.1 unterstützt und ist daher nicht auf dem Server mit älterer Version anwendbar.
Paar Tipps zum Schluss?
Natürlich kann die oben beschriebene Funktion beliebig und sinnvoll erweitert werden:
Weitere Empfänger
Noch mehr an Information, wie zum Beispiel der Referer
Aussortierung bestimmter Errortypen
Verknüpfung mit der Datenbank, um Duplikate auszusortieren