Andreas Korthaus: komplexes Error-Handling

Beitrag lesen

Hallo!

Ich habe mich zwar schon hier udn da mit Error-Handling beschäftigt, aber immer nur für kleine Teile eines Projektes, udn nie in letzter Konsequenz. Jetzt plane ich ja ien Projekt mit modularer Struktur:

alle HTTP-Requests werden auf ein zenrales PHP-Script umgeleitet(index.php).
Dieses Script läd alle Conf Daten ud Module, und reagiert auf den Request in dem es das entsprechende Script für die Ausgabe läd, die dann mit Hilfe von Smarty-Templates generiert wird.

Jetzt überlege ich wie ich ein zenttrales Error-Handling  Objekt einbinden könnte. Dazu habe ich mir PEAR::isError() ausgeguckt(http://pear.php.net/manual/en/class.pear.php), da ich davon viel Gutes gehört habe und mir sicher bin das ich es selbst in annehmbarer Zeit nicht besser hinbekommen würde.

Ich habe folgende Arten von Fehlern:

  • HTTP Fehler(404...)
  • PHP-Fehler(bei Funktionen wie mail()...)
  • PEAR Fehler(PEAR:DB)
  • SMARTY Fehler
  • Anwendungs-Fehler(Fehler im Programm, wenn bestimte Aktion nicht wie erwartet ausgeführt werden kann)
  • Eingabe-Fehler (Formular-Überprüfung)

Folgende Behandlungen der Fehler habe ich vorgesehen:

  • Loggen normaler Fehler
  • Email-Benachrichtigung über schwere Fehler
  • verschiedene Augabe der Fehler(Javascript, HTML-Ausgabe)

Das ganze muß ich überall einbetten können, in Klassen, Funktionen und in normalen Code. Erschwerend kommt hinzu das die Fehlerausgabe mehrsprachig erfolgen soll.

Soweit ich PEAR jetzt verstanden haben muß ich mir für alle Fehlerarten eine eigene Callback-Funktion schreiben, die ich dann ggfs aufrufen kann. z.B. für HTTP-Fehler eine Funktion die eine Fehlerseite erzeugt und für die Logs einen HTTP-Error Header sendet.
Für PHP-Funktionen muß ich dann auch jedesmal eine if-Abfrage machen ob die Funktion funktioniert hat und sonst meine Call-Back-Funktion aufrufen.
Problematischer wird die Sache bei Smarty, das hat ja einen eigenen Error-Handler, wie kann ich das am besten mit meinem Handler in Einklang bringen?
Doof ist das auch mit Klassen, muß ich dann jede Klasse als Erweiterung der PEAR-Klasse schreiben? (... extends PEAR)
Udn was ist mit der Überprüfung der Userdaten? Hat das Sinn auch hir PEAR zu verwenden? Denn das ganz eist ja doch immr individuell  udn ich muß ja darauf reagieren. Bisher habe ich das immer so gemacht:

if(!is_valid($_GET["name"])) {
    $errors[] = "blabla";
}
if(!is_valid($_GET["ort"])) {
    $errors[] = "blabla";
}
if(!is_valid($_GET["lieblingsTVserie"])) {
    $errors[] = "blabla";
}
if ($errors) {
echo implode("<br>",$errors);
}
else {
//starte Aktionen
header("Location:...");
}

Wie macht man das sinnvollerweise mit PEAR?

Und noch eine (peinliche) Frage:
Wohin schreibe ich meien Error_callback Funktionen? Ganz einfach irgendwo in das Script, doer kannich dafür nicht eine eigene Klasse mit entsprechenden Methoden verwenden?

Bin für jeden Tipp sehr dankbar, vielleicht hat hier ja jemand Erfahrung mit der PEAR Error-Klasse.

Vielen Dank im voraus und viele Grüße,
Andreas