Forum und email

Reporte de errores

Cambios de configuración

Con PHP 3 el nivel de reporte de errores estaba establecido como un valor numérico simple formado por la suma de los números relacionados con diferentes niveles de error. Algunos valores usuales eran 15 para reportar todos los errores y advertencias, o 7 para reportar todo excepto mensajes de noticias simples que indicaban mal estilo del código y cosas por el estilo.

PHP 4 tiene un conjunto de niveles de error y advertencia mayor y viene con un analizador sintáctico de configuración que permite el uso de constantes simbólicas para determinar el comportamiento deseado.

El nivel de reporte de errores debe ser ahora configurado mediante la deshabilitación explícita de niveles de advertencia que no desea que generen mensajes de error, con una sentencia lógica OR sobre la constante simbólica E_ALL. ¿Suena complicado? Bien, digamos que usted desea que el sistema de reporte de errores le haga saber sobre cualquier problema excepto por las advertencias de estilo simples que están categorizadas por la constante simbólica E_NOTICE. En ese caso, colocará lo siguiente en su php.ini: error_reporting = E_ALL & ~ ( E_NOTICE). Si desea suprimir las advertencias también, usted agrega la constante apropiada al interior de los paréntesis usando el operador binario OR '|': error_reporting= E_ALL & ~ ( E_NOTICE | E_WARNING).

Warning

Cuando actualice código o servidores desde PHP 3 a PHP 4, usted debería chequear estos parámetros y llamadas a error_reporting() o puede que quiera deshabilitar el reporte de los nuevos tipos de error, especialmente E_COMPILE_ERROR. Esto puede llevar a la generación de documentos sin información alguna sobre qué ha pasado o en dónde investigar por posibles problemas.

Warning

El uso de los valores antiguos 7 y 15 para establecer el reporte de errores es una muy mala idea ya que esto suprime algunas de las nuevas clases de errores presentes, incluyendo errores de la fase de análisis sintáctico. Esto puede producir comportamientos bastante extraños, debido a que posiblemente los scripts no trabajen más sin dejar de mostrar mensajes de error en todas partes.

Esto ha producido una cantidad enorme de reportes de fallos irreproducibles en el pasado, en donde la gente reportaba problemas con el motor de scripts que eran incapaces de rastrear, cuando lo que sucedía en realidad era usualmente algún '}' que faltaba en un archivo requerido, que el analizador sintáctico no podía reportar debido a un sistema de reporte de errores mal configurado.

Así que revisar la configuración de su reporte de errores debe ser lo primero que debe hacer siempre que sus scripts mueran silenciosamente. El motor Zend puede considerarse suficientemente maduro en la actualidad como para afirmar que éste no es el causante de estos comportamientos extraños.

Mensajes de advertencia adicionales

Una gran cantidad de código PHP 3 existente usa construcciones del lenguaje que deben ser consideradas como muy mal estilo ya que, aunque logran el efecto esperado ahora, pueden verse influenciadas por cambios en otros lugares del código. PHP 4 desplegará una enorme cantidad de mensajes de noticia en tales situaciones en donde PHP 3 no lo hacía. La solución simple es deshabilitar los mensajes E_NOTICE, pero usualmente es una buena idea arreglar el código en su lugar.

El caso más común que produce mensajes de noticia ahora es el uso de constantes de cadena sin comillas como índices de matrices. Tanto PHP 3 como PHP 4 llegarán a interpretar éstas como cadenas si no existen palabras clave o constantes con tales nombres, pero en donde sea que una constante con tal nombre haya sido definida en algún lugar del código, puede dañar el script. Esto puede convertirse incluso en un riesgo de seguridad si algún intruso logra redefinir constantes de cadena en forma tal que hace que sus scripts le den derechos de acceso que él no debía tener. Así que PHP 4 le advertirá ahora siempre que use constantes de cadena sin comillas, como por ejemplo en $_SERVER[REQUEST_METHOD]. Modificar tal expresión por $_SERVER['REQUEST_METHOD'] hará feliz al analizador sintáctico y mejorará significativamente el estilo y la seguridad de su código.

Otra cosa sobre la que PHP 4 le notificará es sobre el uso de variables o elementos de matrices sin inicializar.