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.
- register_shutdown_function en el manual de PHP.
http://co.php.net/register_shutdown_function
One Reply to “Manejar los errores fatales en PHP”