3 Stimmen

php try catch Fehlerberichterstattung

Ich habe eine Anwendung, die auf einen Soap-Server angewiesen ist, um Inhalte zu erzeugen. Außerdem basiert die Authentifizierung für die Website auf einem separaten LDAP-Server. Wenn einer dieser Server ausfällt oder nicht antwortet, ist die Website natürlich nicht erreichbar.

Ich versuche, ein Design zu entwerfen, so dass ich Fehlerberichte für Website-Administratoren haben kann und auch eine schöne Nachricht an die Benutzer im Falle, dass die Website nicht funktioniert. Fehlerberichterstattung ist wirklich nur eine E-Mail, Datenbank einfügen oder protokollieren, um Textdatei auf dem Server von PHPs $_COOKIE, $_SERVER, $_SESSION, $_REQUEST zusammen mit möglicherweise eine SoapFault Ausnahme. Diese Informationen würden mir bei der Fehlersuche in Bezug auf mögliche Probleme mit der Website helfen, falls sie auftreten.

Derzeit ist meine Website wie folgt aufgebaut:

SoapClientInterface (defines soap functionality)
      / \
       |
       |   implements
       |
Client (the client implementing the interface, try/catch blocks on all soap calls here) 
      / \
       |
       |  extends
       |
 Authorization (asserts soap objects returned from server/ requests going to server 
               are appropriate for the user performing the request) 
      / \
       |
       | extends
       | 
  {all children classes using the soap interface defined on this level} 

Aus dem schlechten Diagramm oben :-) Ich habe eine Klasse Client, die alle meine Try-Catch-Blöcke für Soapfault-Ausnahmen umfasst und frage mich, wie ich am besten zwei Dinge mit den Catches mache: 1. den Benutzer zu benachrichtigen, dass eine Aktion fehlgeschlagen ist (alle meine Funktionen sind in if/else-Blöcken und wenn ich feststelle, dass eine Operation fehlgeschlagen ist, leite ich den Benutzer zu einer Statusseite weiter und informiere ihn, dass seine Aktion fehlgeschlagen ist.
2. die Situation an die Administratoren der Website zur Fehlersuche zu melden (diese Funktionalität ist im Moment eine einfache Funktion, die in der Statusseite definiert ist, die, wenn die Statusseite einen Fehlercode erhält, die Cookier-, Server-, Session- und Request-Variablen ausgibt und diese per E-Mail an die Administratoren der Website sendet.

Für Vorschläge hierzu wären wir dankbar, und wenn Sie weitere Informationen benötigen, fragen Sie bitte nach.

EDIT: Nach meiner Erfahrung mit Webprogrammierung zeigen meine Anwendungen den Status von Benutzeraktionen normalerweise auf der Seite an, auf der die Aktion stattfindet, und leiten nicht an eine andere Seite weiter. Dies ist das erste Mal, dass ich eine Anwendung so kodiert habe, dass sie eine Benutzeraktion ausführt und für alle Statusmeldungen auf eine separate Seite umleitet. Sollte ich mich selbst dafür bestrafen, dass ich es so gemacht habe? Sieht jemand einen Vorteil darin, eine einzige Statusseite für alle Website-Aktionen zu haben oder eine Klasse/Funktion, die den Status auf der Seite meldet, auf der die Aktion stattgefunden hat? (Ich frage dies in Bezug auf das Design der Statusseite an sich und wie man Fehler melden und was nicht.)

1voto

ircmaxell Punkte 159431

Nun, ich persönlich denke, dass es auf den Fehler ankommt. Nach meiner Erfahrung gibt es drei Arten von Ausnahmen. Diejenigen, die man ignorieren kann, diejenigen, die man umgehen kann, und diejenigen, die man zum Beenden der Ausführung verwendet (A file_not_found Ausnahme kann ignoriert werden, wenn Sie nur versuchen, die Datei zu löschen, eine resource_not_available Die Ausnahme kann unter Umständen umgangen werden, wenn es alternative Quellen für die Ressource gibt, und eine database_connection_failure Ausnahme würde die Beendigung der Anwendung erfordern, es sei denn, Sie haben ein Backup)... Welche Art von Ausnahme abgefangen wurde, wird diktieren, was Sie mit ihr tun.

Ich persönlich installiere eine globaler Ausnahmebehandler ... Dann kann ich in meinem Catch-Block wählen, ob ich die Anfrage bereinige, sie anders behandle, weitermache (wenn es sich um eine behebbare Ausnahme handelt) oder die Ausnahme erneut auslöse, wenn ich sie nicht richtig behandeln kann (Abfragefehler usw.). Wenn die Ausnahme den obersten Punkt des Stapels erreicht (den globalen Handler), protokolliere ich den Fehler (ich verwende dafür eine Datenbanktabelle) und gebe einen internen Serverfehler 500 aus.

Was die Weiterleitung bei Fehlern angeht, so kann ich das nicht ausstehen. Wenn der Fehler ein zeitlicher Fehler ist, warum kann ich dann nicht einfach die Seite aktualisieren? Warum muss ich zurückgehen (wenn ich es überhaupt kann), um es noch einmal zu versuchen...

Solange Sie den Puffer richtig ausgeben, sollten Sie fast immer in der Lage sein, eine Fehlerseite zu rendern, ohne dem Benutzer sensible Informationen anzuzeigen (ich sage "fast", da Sie bei einem fatalen Fehler nichts rendern können)... Andernfalls verstoßen Sie gegen die HTTP-Spezifikation (da Sie sagen, dass es eine temporäre Weiterleitung von der aktuellen Seite gibt, auf der der Fehler aufgetreten ist, anstatt den richtigen Status-Header "Ein Fehler ist aufgetreten")...

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X