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
).
| Aviso |
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.
|
| Aviso |
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.
|
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.