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_
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_