Manejar los errores fatales en PHP

Introducción.

Los errores fatales son problemas críticos de los cuales no es posible recuperar la ejecución del programa, por esta misma razón no pueden ser manejados como excepciones con bloques try/catch.

A pesar de que no es posible recuperar un programa después de un error fatal, si es posible realizar ciertas acciones de cierre que pueden ser útiles para mostrar un mensaje de error mas amigable y realizar el registro del error para su futura revisión, evitando que el lenguaje o el framework que se esté utilizando muestre un error difícil de comprender para el usuario final.

Ejemplo.

Un caso de error fatal es el producido por la recursión infinita.

function f($i)
{
 return f($i+1);
}

f(1);

El código anterior generará el siguiente mensaje de error de PHP.

Fatal error: Maximum function nesting level of '100' reached, aborting! in php shell code on line 3

Call Stack:
 12.0763      62388   1. {main}() php shell code:0
 12.0764      62548   2. f() php shell code:1
 12.0904      62772   3. f() php shell code:3
 12.0905      62996   4. f() php shell code:3
 12.0905      63220   5. f() php shell code:3
 12.0905      63444   6. f() php shell code:3
 12.0905      63668   7. f() php shell code:3
 ...

Implementación del manejo.

Desactivar la funcionalidad de PHP para mostrar los errores al usuario.

ini_set('display_errors', 0);

Registrar la función que se va a ejecutar durante el cierre de la ejecución de la aplicación.

register_shutdown_function('shutdown');

Realizar la implementación de la función de cierre.  En ella se filtran los diferentes tipos de error y se implementan, en este caso, únicamente los errores fatales.

function shutdown()
{
 if(!is_null($e = error_get_last()))
 {
  if($e['type'] == E_ERROR)
  {
    // ... implementación ...
  }
 }
}

Enlaces.

One thought on “Manejar los errores fatales en PHP”

Leave a Reply

Your email address will not be published. Required fields are marked *