Gestión estándar de errores en PHP

Podemos, mediante las prestaciones normalizadas de PHP, establecer el nivel de errores que queremos que se nos muestre durante la ejecución de un script, de modo que los detectemos y podamos corregir lo que sea necesario. Para ello recurrimos a la directiva error_reporting del fichero de configuración (php.ini).

Esta recibe valores constantes según la siguiente tabla:

CONSTANTES DE ERROR
VALORCONSTANTEERRORES DETECTADOS
1E_ERRORErrores fatales en tiempo de ejecución. Se detiene la ejecución del script.
2E_WARNINGAvisos en tiempo de ejecución. La ejecución del script no se detiene, pero puede dar resultados erróneos.
4E_PARSEErrores como la falta de un punto y coma, paréntesis que no se cierran, etc.
8E_NOTICENotificación en tiempo de ejecución.
16ECORE_ERRORErrores fatales que ocurren durante el arranque inicial de PHP, debido a fallos del propio intérprete.
32E_CORE_WARNINGAdvertencias (errores no-fatales) que ocurren durante el arranque inicial de PHP.
64E_COMPILE_ERRORErrores fatales en tiempo de compilación. Es como un E_ERROR, excepto que es generado por el Motor de Scripting de Zend (1).
128E_COMPILE_WARNINGAdvertencias en tiempo de compilación (errores no fatales). Es como un E_WARNING, excepto que es generado por el Motor de Scripting de Zend (1).
256E_USER_ERRORError generado por el usuario.
512E_USER_WARNINGAdvertencia generada por el usuario.
1024E_USER_NOTICEAnotación generada por el usuario.
2047E_ALLTodos los errores y advertencias excepto los correspondientes a la constante E_STRICT.
2048E_STRICTNoticias de tiempo de ejecución. Habilite este valor para hacer que PHP sugiera cambios en su código que velarán por la mejor interoperatibilidad de su código. Este nivel de error está disponible desde la versión 5 del lenguaje.
(1)La tecnologia Zend se emplea para compilar scripts de PHP para usos específicos.

Podemos fijar una constante de la tabla como valor de error_reporting. Entonces el sistema mostrará todos los errores que se produzcan del nivel especificado, o de niveles inferiores, según el valor numérico que aparece en la columna de la izquierda. Así pues, suponga el siguiente valor para la directiva:

error_reporting = E_NOTICE

Se mostrarán los errores que se engloben en las categorías E_NOTICE, E_WARNING, E_PARSE y E_ERROR, pero no los de niveles superiores.

También podemos configurar esta directiva estableciendo diferentes niveles de error. Por ejemplo, suponga que la asignamos los siguientes valores:

error_reporting = E_ALL & ~E_NOTICE

En este caso se determina que se muestresn lo serrores comprendidos en el nivel E_ALL e inferiores, pero excluyendo, específicamente, los que correspondan al nivel E_NOTICE. Fíjese que ambas constantes van unidas mediante el operador a nivel de bit &. Se usa este porque, en definitiva, estas constantes son bits de un byte que es el que se almacena en la directive error_reporting. Además, el valor E_NOTICE va precedido de un operado de negación para excluirlo de los errores que deben mostrarse.

Existen otras dos directivas relativas al tratamiento de errores, en el fichero de configuración, que usted debe conocer. La primera es display_errors. Su valor por defecto es On, lo que permite que se muestren los errores en la página. Eso está muy bien mientras estamos depurando un script. Sin embargo, una vez que este se pone a disposición del público, conviene desactivar esta directiva. No queda bien que, si se produce un error que se nos haya pasado por alto, este sea visto por los usuarios. Además, los mensajes de error proporcionan cierta información, por otra parte necesaria para la depuración, que una persona con los conocimientos adecuados podría usar como una vulnerabilidad de nuestro sitio.

Por último, considere la directiva log_errors. Cuando se activa (valor On), los errores se almacenan en un fichero específico en el servidor, llamado, por defecto, php_error.log. El nombre de este fichero, así como su ruta y tamaño máximo. también pueden establecerse en el fichero de configuración.

Pero las directivas de configuración no son la única manera de gestionar errores. Con independencia del valor que tenga la directiva error_reporting, usted puede usar una función homónima en su script para cambiar el nivel de detección de errores para ese script en concreto, así:

error_reporting (E_WARNING);

Si incluye esta línea al principio de su script (es el sitio más lógico), cuando este se ejecute sólo se mostrarán los errores de nivel E_WARNING y E_ERROR.

Comparte