PHP bietet keine konventionellen Mittel zum Abfangen und Wiederherstellen von fatalen Fehlern. Das liegt daran, dass die Verarbeitung nach einem schwerwiegenden Fehler normalerweise nicht wiederhergestellt werden sollte. Ein String-Matching eines Ausgabepuffers (wie im Originalbeitrag vorgeschlagen, ist die auf PHP.net beschriebene Technik definitiv nicht ratsam. Es ist einfach unzuverlässig.
Auch der Aufruf der Funktion mail() aus einer Error-Handler-Methode heraus erweist sich als problematisch. Bei vielen Fehlern wäre Ihr Mailserver überlastet, und Sie könnten einen unübersichtlichen Posteingang vorfinden. Um dies zu vermeiden, könnten Sie einen Cron laufen lassen, der die Fehlerprotokolle regelmäßig überprüft und entsprechende Benachrichtigungen sendet. Sie könnten sich auch mit Systemüberwachungssoftware befassen, z. B. mit Nagios .
Um auf den Teil über die Registrierung einer Abschaltfunktion einzugehen:
Es stimmt, dass man eine Abschaltfunktion registrieren kann, und das ist eine gute Antwort.
Der Punkt hier ist, dass wir normalerweise nicht versuchen sollten, uns von fatalen Fehlern zu erholen, vor allem nicht, indem wir einen regulären Ausdruck gegen Ihren Ausgabepuffer verwenden. Ich reagierte auf die akzeptierte Antwort , die auf einen Vorschlag auf php.net verweist, der inzwischen geändert oder entfernt wurde.
Der Vorschlag lautete, während der Ausnahmebehandlung einen Regex gegen den Ausgabepuffer zu verwenden und im Falle eines schwerwiegenden Fehlers (der durch den Abgleich mit dem von Ihnen erwarteten konfigurierten Fehlertext erkannt wird) zu versuchen, eine Art Wiederherstellung oder Weiterverarbeitung durchzuführen. Das wäre keine empfohlene Vorgehensweise (ich glaube, das ist auch der Grund, warum ich den ursprünglichen Vorschlag nicht finden kann. Entweder habe ich ihn übersehen, oder die php-Community hat ihn abgeschossen).
Es ist vielleicht erwähnenswert, dass die neueren PHP-Versionen (etwa 5.1) die shutdown-Funktion früher aufrufen, bevor der Ausgabepufferungs-Callback aufgerufen wird. In Version 5 und früher war die Reihenfolge umgekehrt (auf den Aufruf der Ausgabepufferung folgte die Shutdown-Funktion). Außerdem werden seit etwa 5.0.5 (das ist viel früher als die Version 5.2.3 des Fragestellers) Objekte entladen, bevor eine registrierte Shutdown-Funktion aufgerufen wird, so dass Sie sich nicht darauf verlassen können, dass Ihre In-Memory-Objekte irgendetwas tun.
Die Registrierung einer Shutdown-Funktion ist also in Ordnung, aber die Art der Aufgaben, die von einer Shutdown-Funktion ausgeführt werden sollten, sind wahrscheinlich auf eine Handvoll sanfter Shutdown-Prozeduren beschränkt.
Das Wichtigste, was man hier mitnehmen kann, sind ein paar weise Worte für jeden, der über diese Frage stolpert und den Ratschlag in der ursprünglich akzeptierten Antwort sieht. Regexen Sie Ihren Ausgabepuffer nicht.