PHP no le proporcionará ningún medio convencional para la captura de errores fatales porque realmente no debería ser atrapado . Es decir, no debe intentar recuperarse de un error fatal. La coincidencia de cadenas en un buffer de salida es definitivamente desaconsejable.
Llamar a la función mail() desde un método de gestión de errores también resulta problemático. Si tuviera muchos errores, su servidor de correo se cargaría de trabajo, y podría encontrarse con una bandeja de entrada muy complicada. Para evitar esto, podrías considerar ejecutar un cron para escanear los registros de errores periódicamente y enviar las notificaciones correspondientes. También puedes buscar un software de monitorización del sistema, como Nagios .
Para hablar de la parte sobre el registro de una función de apagado:
Es cierto que puedes registrar una función de apagado, y esa es una buena respuesta.
El punto aquí es que usted no debe tratar de recuperarse de los errores fatales, especialmente no mediante el uso de una expresión regular contra su buffer de salida. Yo estaba respondiendo a la respuesta aceptada que enlazaba con una sugerencia en PHP.net que ya ha sido modificada o eliminada.
Esa sugerencia era usar una regex contra el buffer de salida durante el manejo de la excepción, y en el caso de un error fatal (detectado por la coincidencia contra cualquier texto de error configurado que pudiera estar esperando), tratar de hacer algún tipo de recuperación o continuar el procesamiento. Eso no sería una práctica recomendada (creo que por eso tampoco encuentro la sugerencia original. O la he pasado por alto, o la comunidad PHP la ha rechazado).
Puede ser que valga la pena notar que las versiones más recientes de PHP (alrededor de la 5.1) parecen llamar a la función de apagado antes, antes de que la llamada de retorno al búfer de salida sea invocada. En la versión 5 y anteriores, el orden era el inverso (la llamada de retorno al búfer de salida era seguida por la función de apagado). Además, desde la versión 5.0.5 (que es muy anterior a la versión 5.2.3 del autor de la pregunta), los objetos se descargan mucho antes de que se llame a la función de apagado registrada, por lo que no podrá confiar en sus objetos en memoria para hacer mucho.
Así que registrar una función de apagado está bien, pero el tipo de tareas que debería realizar una función de apagado se limita probablemente a un puñado de procedimientos de apagado suaves.
Lo más importante aquí son algunas palabras de sabiduría para cualquiera que se tropiece con esta pregunta y vea el consejo en la respuesta originalmente aceptada. No regex su salida buffer.