| Tratamiento de los errores en PHP | |
| Los errores producidos en el momento de ejecutar un script PHP suelen ser advertidos en la ventana del navegador. Si la directiva error_log de php.ini tiene asignada una ruta y un nombre de fichero tales mensajes de error se almacenarían también en ese fichero. Hay dos directivas que conviene diferenciar: error_reporting y display_errors. Con la primera se estable den que condiciones se producen los mensajes de error y en la segunda si van a visualizarse o no. Cuando display_errors está desactivada aunque se produzcan mensajes de error no se visualizarán pero si se guardarían en el fichero destinado a almacenar esos errores. Obviamente si error_reporting está configurado de modo que no genere errores resulta intranscendente como esté configurado display_errors. |
|
| Visualización de los mensajes de error | |
| En el fichero php.ini se incluye una directiva denominada display_errors que permite establecer si los mensajes de error van a visualizarse en la ventana de nuestro navegador. Son posibles dos valores: On / Off siendo el primero el valor por defecto en la configuración de php.ini. Los valores preestablecidos en el fichero php.ini pueden modificarse temporalmente -en tiempo de ejecución- para un script determinado. Bastaría incluir en la primera línea del script la función ini_set('display_errors','On') o ini_set('display_errors','Off') para que se aplicara temporalmente la configuración aquí indicada independientemente del valor que tuviera establecido en php.ini. Las configuraciones por defecto de PHP son distintas en las versiones para Windows y Ubuntu. En el primero de los casos la configuración de la directiva en php.ini es display_errors=ON mientras que en el segundo de los casos display_errors=Off. Es algo a tener en cuenta porque las visualizaciones de los errores advertidos en estos materiales pueden no producirse en instalaciones sobre Ubuntu si no se ha modificado esta directiva en php.ini. |
|
| Avisos de error en PHP | |
| También se incluye en php.ini otra directiva denominada error_reporting que permite establece que tipo mensajes de error va a generar PHP. Los diferentes valores que pueden asignarse a estas directiva son los siguientes: |
|
| Niveles de error | Significado |
| E_ALL | Todos errores y/o avisos |
| E_ERROR | Error grave que impiden la ejecución de los scripts en tiempo de ejecución |
| E_RECOVERABLE_ERROR | Errores graves (recuperables) que no impiden la ejecución de los scripts en tiempo de ejecución |
| E_WARNING | Advertencia en tiempo de ejecución. No impide la ejecución del script |
| E_PARSE | Errores de compilación detectados en tiempo de análisis de los scripts |
| E_NOTICE | Avisos en tiempo de ejecución (estas son las advertencias de un aparente error en el código que puede ser intencional (por ejemplo, utilizar una variable sin inicializar asumiendo el hecho de que automáticamente se inicializará como una cadena vacía) |
| E_STRICT | Avisos en tiempo de ejecución que sugieren cambios en el código para garantizar una mejor interoperabilidad y compatibilidad con versiones posteriores. |
| E_CORE_ERROR | Error grave en el momento de iniciarse el PHP |
| E_CORE_WARNING | Advertencia no grave en el momento de iniciarse el PHP |
| E_COMPILE_ERROR | Error grave en tiempo de compilación |
| E_COMPILE_WARNING | Advertencia de error en tiempo de compilación |
| E_USER_ERROR | Error generado por el usuario |
| E_USER_WARNING | Advertencia generada por el usuario |
| E_USER_NOTICE | Aviso generado por el usuario |
| E_DEPRECATED | Advertencia sobre el código que no funcionará en futuras versiones de PHP |
| Modo de configurar la directiva error_reporting | |
| La directiva error_reporting lleva detrás del signo igual uno o varios de los niveles de error de la tabla anterior. Cuando se trata de varios valores pueden pueden ir enlazados por los operadores booleanos & (and)ó | (or). Así mismo, cualquiera de identificadores de nivel puede ir precedido del símbolo ~ (not) de negación |
|
| Configuraciones por defecto en diferentes versiones de PHP para Windows | |
| Versión | Valores por defecto en los archivos php.ini |
| PHP 5.2 y anteriores | error_reporting = E_ALL & ~E_NOTICE - Muestra todos los errores excepto los del tipo E_NOTICE |
| PHP 5.3 Development | error_reporting = E_ALL | E_STRICT - Muestra todos los errores, avisos y advertencias. |
| PHP 5.3 Production | error_reporting = E_ALL & ~E_DEPRECATED - Muestra todos los errores excepto los relativos a funciones que pueden resultar obsoletas en próximas versiones |
| Configuraciones por defecto en Ubuntu | |
| PHP 5.3 Production | error_reporting = E_ALL & ~E_NOTICE - Muestra todos los errores excepto los del tipo E_NOTICE |
| Podemos modificar a nuestro gusto esta directiva sin más que editar el fichero php.ini, buscar la línea que comienza por error_reporting = y asignarle la configuración que consideremos oportuna. Igual que ocurría con display_errors también puede modificarse para un script determinado el valor del error_reporting establecido en el fichero php.ini. Sería cuestión de incluir, por ejemplo, la instrucción ini_set('error_reporting','~E_ALL') | |
| Al hacer la configuración de PHP 5 hemos elegido como fichero base el denominado php.ini-developement cuya directiva está configurada de forma tan estricta que nos advierte de errores que pueden no serlo. Ocurriría, por ejemplo, que en el caso de utilizar una variable que no ha sido inicializada nos daría el mensaje de error aunque ello no impide ni la correcta ejecución del script ni tampoco la asignación de la cadena nula como valor de esa variable |
|