Mostrar errores ocultos en PHP

En numerosas ocasiones necesitamos depurar errores de scripts PHP que se encuentran en servidores con la opción de mostrar los errores  deshabilitada, lo que nos impide disponer de información del error producido en pantalla.

Esto que en general es recomendable, se convierte en un problema cuando nos topamos con un error en el servidor que no conseguimos reproducir en el entorno de desarrollo, por ello debemos recurrir a algún método que nos permita mostrar en pantalla el error pero sólo en la página que necesitamos depurar.

Para este y otros casos donde necesitamos modificar un parámetro determinado del servidor podemos hacer uso de la función PHP ini_set(). Esta función nos permite modificar parametros del servidor en la ejecución en curso que no se mantienen para siguientes consultas producidas en la navegación.

Para el caso que nos ocupa el parametro que deseamos activar en el servidor es «display_errors» y el valor deseado 1.

En la mayoria de los casos necesitaremos con anterioridad definir que tipo de mensajes de error deseamos mostrar en nuestra página en el proceso de depuración para lo que haremos uso de la función PHP error_reporting(), con el parámetro que mejor se adapte a nuestras necesidades.

Una buena manera de solicitar los errores de la página consistirá en incluir al comienzo de la misma un par de líneas solicitando que se nos muestren todos los errores exceptuando los etiquetados como «Noticias», que normalmente son poco relevantes, como se muestra a continuación:

<?php
error_reporting(E_ALL & ~E_NOTICE);
ini_set("display_errors", 1);
?> 

A continuación se muestra un listado con las opciones disponibles para la consulta de errores clasificados por tipos:

ValorConstanteDescripción
1E_ERRORErrores Fatales en tiempo de ejecución. Éstos indican errores que no se pueden recuperar, tales como un problema de asignación de memoria. La ejecución del script se interrumpe.
2E_WARNINGAdvertencias en tiempo de ejecución (errores no fatales). La ejecución del script no se interrumpe.
4E_PARSEErrores de análisis en tiempo de compilación. Los errores de análisis deberían ser generados únicamente por el analizador.
8E_NOTICEAvisos en tiempo de ejecución. Indican que el script encontró algo que podría señalar un error, pero que también podría ocurrir en el curso normal al ejecutar un script.
16E_CORE_ERRORErrores fatales que ocurren durante el arranque incial de PHP. Son como un E_ERROR, excepto que son generados por el núcleo de PHP.
32E_CORE_WARNING Advertencias (errores no fatales) que ocurren durante el arranque inicial de PHP. Son como un E_WARNING, excepto que son generados por el núcleo de PHP.
64E_COMPILE_ERRORErrores fatales en tiempo de compilación. Son como un E_ERROR, excepto que son generados por Motor de Script Zend.
128E_COMPILE_WARNINGAdvertencias en tiempo de compilación (errores no fatales). Son como un E_WARNING, excepto que son generados por Motor de Script Zend.
256E_USER_ERRORMensaje de error generado por el usuario. Es como un E_ERROR, excepto que es generado por código de PHP mediante el uso de la función de PHP trigger_error().
512E_USER_WARNINGMensaje de advertencia generado por el usuario. Es como un E_WARNING, excepto que es generado por código de PHP mediante el uso de la función de PHP trigger_error().
1024E_USER_NOTICEMensaje de aviso generado por el usuario. Es como un E_NOTICE, excepto que es generado por código de PHP mediante el uso de la función de PHP trigger_error().
2048E_STRICTHabilítelo para que PHP sugiera cambios en su código, lo que asegurará la mejor interoperabilidad y compatibilidad con versiones posteriores de PHP de su código.
4096E_RECOVERABLE_ERRORError fatal capturable. Indica que ocurrió un error probablemente peligroso, pero no dejó al Motor en un estado inestable. Si no se captura el error mediante un gestor definido por el usuario (vea también set_error_handler()), la aplicación se abortará como si fuera un E_ERROR.
8192E_DEPRECATEDAvisos en tiempo de ejecución. Habilítelo para recibir avisos sobre código que no funcionará en futuras versiones.
16384E_USER_DEPRECATEDMensajes de advertencia generados por el usuario. Son como un E_DEPRECATED, excepto que es generado por código de PHP mediante el uso de la función de PHP trigger_error().
30719E_ALLTodos los errores y advertencias soportados, excepto del nivel E_STRICT.