Damit Fehler global behandelt werden, kann man via php.ini die auto_prepend_file Direktive setzen. Damit lässt sich eine php Datei angeben, die bei jedem Aufruf garantiert geladen wird. Dort definieren wir mithilfe der php Funktionen set_error_handler und set_exception_handler was genau mit unseren Fehlern passieren soll. Das kann in etwa so aussehen. Nicht behandelte Exception werden nie von php erzeugt, nur von den eigenen Programmen. Diese wollen wir immer verarbeiten. Hingegen ignorieren wir notices und deprecated Fehler von PHP:
include "prepend/func.customerrorhandler.php";
include "prepend/func.customexceptionhandler.php";
define("ERROR_EMAIL", "empfaenger@email");
set_error_handler("customErrorHandler", E_ALL & ~E_NOTICE & ~E_DEPRECATED);
set_exception_handler("customExceptionHandler");
Dazu gehören nun natürlich auch die zwei Dateien, die via include dazugeladen werden.
Damit wir etwas mit den Fehlern anfangen können, wird die Quelle hier bereits genauer untersucht. Wir erhalten an die angegebene Email viele hilfreiche Informationen wie den Stack-Trace, Source Code Abschnitte und HTTP Header. Das erledigt unser Script. Einmal für Errors und einmal für Exceptions. Aus Übersichtsgründen sind die beiden Files verlinkt:
customexceptionhandler.php
customerrorhandler.php
Bei Fehlern wird die errorpage.html ausgegeben. Die kann individuell gestaltet werden. Bei uns landen alle nötigen Informationen per Mail, damit wir uns gezielt auf die Fehlersuche machen können.