Erhalte Formulardaten bei 500 Fehler

9

Ich versuche Informationen zu sammeln, wenn auf unseren Websites ein interner Serverfehler auftritt. Wir haben viele Anwendungen, die nie mit einer korrekten Fehlerprotokollierung eingerichtet wurden, und wenn ein Problem auftritt, geben unsere Kunden uns nicht die besten Informationen, um damit zu arbeiten. Was ich tun möchte, ist, dass wenn eine 500 passiert, würde ich gerne Daten darüber sammeln, wo das Problem passiert ist, wie zum Beispiel:

  • Die Seite, auf der sich der Benutzer befand
  • Alle mit der Seite verknüpften Daten ($ _GET, $ _POST usw.)

Ich habe benutzerdefinierte Fehlerseiten auf unserem Server (IIS 7) mit der folgenden Konfiguration eingerichtet:

%Vor%

Und auf dieser Seite bin ich nur var_dump-in $ _POST und $ _GET, um zu sehen, ob etwas in diesen auf die Fehlerseite kommt, aber es nicht. Mein Ziel bei einem 500 Fehler wäre:

  • Sammeln Sie Daten über die Seite / den Benutzer zum Zeitpunkt des Fehlers
  • Senden Sie eine E-Mail an das Support-Team zu dem Problem mit den gesammelten Daten

Gibt es eine Möglichkeit, diese Daten zu sammeln und die benutzerdefinierte Fehlerseite sehen zu lassen?

error.php:

%Vor%

In allen Fällen ist $ _POST leer, obwohl ich ein Formular eingereicht habe, um diesen Fehler zu bekommen, und $ _GET enthält das (was Sinn macht):

%Vor%

4/19 Aktualisierung

Ich habe mit einigen Ideen gespielt, und die wichtigste war das Speichern nützlicher Daten in einer Session-Variablen. Ich habe versucht, einige Formulardaten in einer Sitzungsvariablen auf der Testseite zu speichern, die den Fehler verursacht, aber nie in die Sitzung gelangt. Es scheint so, als ob der Server feststellt, dass auf der Seite ein Fehler auftritt, so dass er niemals Code auf der Seite ausführt und sofort die Fehlerseite ausführt.

    
Jason Kaczmarsky 18.04.2013, 15:15
quelle

4 Antworten

2

Wenn Ihr Server begonnen hat, die php-Datei zu interpretieren, und nachdem dieser 500 Fehler aufgetreten ist, bedeutet dies, dass in Ihrem Code ein fataler Fehler aufgetreten ist. Es kann alles Mögliche sein, vom einfachen Tippfehler bis zum erreichten Ausführungszeitlimit.

Die beste und einzige Möglichkeit, fatale Fehler in PHP zu finden, ist register_shutdown_function . Sie sollten es über Ihrer Arbeitsdatei definieren:

%Vor%

Einfacher Testfall:

%Vor%

Das bekomme ich mit meinem handle_fatal aus dem Beispiel:

%Vor%

Immerhin sollten Sie wissen, dass das Erfassen solcher Fehler nicht immer die beste Idee ist und Sie vorsichtig sein sollten.

    
s3m3n 28.04.2013, 22:40
quelle
2

Ich denke, dass Sie Details auf Server-Ebene anstatt auf PHP-Ebene protokollieren müssen, da php möglicherweise nicht einmal initialisiert wird, wenn ein 500er interner Fehler auftritt. Wenn Sie Apache verwenden, können Sie

auschecken

Ссылка

Die Fehlerprotokolle liefern Ihnen auf jeden Fall die Anfrage-URL, die Remote-Adresse und die Params (Abfrage-String). Aber ich bin nicht sicher über Post-Daten. Möglicherweise können Sie einige Änderungen im Protokollformat vornehmen, um ganze Header und Rohdaten auf einer bestimmten Ebene abzulegen.

Aber ich bin mir sicher, dass das Einloggen auf PHP-Ebene zu bestimmten Zeiten ausbleibt, wenn der Server tatsächlich aufgibt und PHP nicht eingreift ...

    
Amit Kriplani 26.04.2013 07:12
quelle
0

Überprüfen Sie das $_SERVER -Array, falls etwas von Interesse ist.

Ich habe etwas recherchiert und wenn Sie ASP verwenden, könnten Sie die Fehlerdetails in Server.GetLastError , was zu der Annahme führt, dass IIS die Informationen über das Array $_SERVER weitergibt.

    
akirk 19.04.2013 07:20
quelle
0

Ich glaube, dass Sie einen benutzerdefinierten Fehlerhandler in PHP einrichten können. Das Schwierige ist, dass einige Fehler dazu führen können, dass PHP stirbt und eine 500 zurückgibt, ohne den Fehlerhandler auszulösen. Die Plus-Seite ist, dass es leicht sein sollte, Site-weit ohne viele Änderungen zu implementieren.

Ссылка

Sie sollten die meisten relevanten Informationen im $ _SERVER global finden können. Sie können auch die Funktion debug_backtrace auschecken, die Ihnen einen Stack-Trace liefert.

Ссылка

Viel Glück

    
William Clemens 23.04.2013 02:45
quelle

Tags und Links