Archivo por días: 16 enero, 2014

Manejo y registro de errores php en tiempo de ejecución

Es posible que al ejecutar un sitio web php con apache aparezcan en pantalla errores de tipo notice, warning, error…

El modo en que se muestran o advierten al usuario es lógicamente administrable a través de sus ficheros de configuración.

Antes de nada hay que aclarar que php ofrece distintos niveles de manejo de errores y logging.

Las constantes de nivel de errores

Los niveles de error en php son:

  • E_ALL: todos lo errores y advertencia.
  • E_ERROR: errores fatales en tiempo de ejecución.
  • E_RECOVERABLE_ERROR:  errores en tiempo de ejecución capturable. Si no se captura pasa a ser de tipo E_ERROR.
  • E_WARNING: advertencias en tiempo de ejecución. (no son errores fatales).
  • E_PARSE: errores en tiempo de compilación.
  • E_NOTICE: avisos en tiempo de ejecución (son advertencias que suelen derivar de bugs en el código, pero que son posiblemente intencionados).
  • E_STRICT: avisos en tiempo de ejecución para que php sugiera cambios en el código para asegurar compatibilidad con dicho código
  • E_CORE_ERROR: errores fatales que ocurren durante la inicialización de php.
  • E_CORE_WARNING: advertencias que ocurren durante el arranque de php.
  • E_COMPILE_ERROR: errores fatales en tiempo de compilación.
  • E_COMPILE_WARNING: advertencias en tiempo de compilación.
  • E_USER_ERROR: mensajes de error generados por el usuario mediante el código.
  • E_USER_WARNING: mensajes de advertencia creados por el usuario.
  • E_USER_NOTICE: mensajes de aviso creados por el usuario por código.
  • E_DEPRECATED: aviso sobre una parte de código que no será funcional en versiones futuras de php.
  • E_USER_DEPRECATED: aviso generado por el usuario que no será funcional en posteriores versiones de php.

Estos errores se mostrarán o no dependiendo de la configuración de php.ini. Este fichero se encuentra en la instalación típica de php dentro de Apache.

Los parámetros más importantes que se utilizan para configurar el manejo de errores  y logs son:

  • error_reporting
  • display_errors

Con error_reporting podemos establecer qué nivel o niveles de errores se mostrarán de todos los que hemos expuesto anteriormente.

Los valores más comunes para la configuración de este parámetro son:

  • Valor por defecto en la mayor parte de instalaciones:
error_reporting=E_ALL & ~E_DEPRECATED & ~E_STRICT & ~E_NOTICE
  • Valor idóneo para etapas de desarrollo:
error_reporting=E_ALL
  • Valor sugerido para producción:
error_reporting=E_ALL & ~E_DEPRECATED & ~E_STRICT

Con la directiva display_errors podemos decidir si queremos que los errores se muestren en las páginas (en forma de html) a la hora de visualizar el resultado de nuestro código php. Esto puede ser muy útil cuando se trabaja en local o en proyectos que aún no están subidos a producción pero es totalmente indeseable cuando la web está desplegada en producción. Elegir una de las dos:

display_errors=On; Esta configuración mejor en desarrollo
display_errors=Off ; Esta configuración en producción