2010-05-05 10 views
5

ich eine Fehlerprotokolldienst zu schreiben, die auf meinem Server laufen in Websites integriert werden, die mir Fehler Chargen E-Mail wird usw.Logging fatal/analysieren Fehler in PHP5

So zu finden Ich habe versucht, zu out, wenn es eine Möglichkeit gibt, fatale und Parse-Fehler zu behandeln, aber nicht die Tricks, um es in PHP-Code (Ausgabepuffer, Shutdown-Funktion) zu behandeln. Ich bin ziemlich glücklich, etwas C-Code oder etwas außerhalb des PHP-Codes zu schreiben. Ich möchte auch, wenn möglich, eine Weiterleitung (meine Seiten verwenden Ausgang Pufferung, so dass keine Header gesendet werden sollte).

Ich bin mir ziemlich sicher, dass dies mit einem PHP-Modul gemacht werden könnte, aber ich habe noch nie eine geschrieben und habe keine Ahnung, wo ich anfangen soll.

Antwort

3

Es gibt keine Möglichkeit, fangen einen schwerwiegenden oder Parse-Fehler in PHP. Aber ..

In 5.2 fügten sie error_get_last() hinzu. Sie können es in einer Shutdown-Funktion aufrufen und die Protokollierung durchführen. Eine ungetestete 5.3 Beispiel für eine E-Mail abzufeuern, wenn es ein fataler Fehler war:

<?php 
register_shutdown_function(function(){ 
    $err = error_get_last(); 
    if(is_array($err) && array_key_exists('type', $err) $err['type'] > 0 
     && ($err['type'] == E_ERROR || $err['type'] == E_PARSE) { 
     error_log("Oh noes, a fatal: " . var_export($err, true), 1, '[email protected]'); 
    } 
}); 

(. Sie werden einen Rückruf verwenden müssen, wenn Sie nicht auf 5.3 und können anonyme Funktionen nicht tun)

Leider, da dies in einer Shutdown-Funktion behandelt wird, sind die Chancen, dass Header bereits ausgegeben wurden und Sie möglicherweise nichts Nützliches für den Benutzer bereitstellen können. Dies hängt jedoch vom Rest der Anwendung ab, also könnte es für Sie funktionieren. Probieren Sie es aus und finden Sie es heraus!

+0

Ich habe es in meiner Frage klar gemacht Ich versuche nicht, die Fehler mit diesen PHP-Tricks zu erfassen, ich muss sie nur protokollieren und irgendwie behandeln. Die Verwendung eines PHP-Moduls scheint der wahrscheinlichste Weg zu sein, aber ich kann nicht viele Informationen über die Fehlerbehandlung in PHP-Modulen finden. – PeterBelm

+0

Ich machte auch in meiner Antwort klar, dass Sie nicht fangen können, aber Sie können sich anmelden. :) – Charles

+0

hat für mich funktioniert - auch die Code-Syntax ist falsch –

1

Standardmäßig werden alle Fehler an das Webserver-Fehlerprotokoll übergeben, aber Sie können es in php.ini ändern, indem Sie den Pfad zu Ihrer eigenen Datei via error_log setting angeben. Was bleibt also übrig, ein separates Skript/eine App zu schreiben, um jeden Tag/was auch immer zu analysieren/Daten zu senden/Datei abzurunden und es als Cron-Job auszuführen.

+0

Das einzige Problem mit diesem ist, dass ich nicht in der Lage wäre, eine Weiterleitung zu erteilen. Ich denke, mit einem PHP-Modul könnte ich das erreichen. – PeterBelm