Sigueme por RSS! RSS

Configurando la visualización de errores en PHP

Hace poco alguien me comentaba que luego de instalar PHP5 en ubuntu, al ejecutar un script este no le mostraba los errores que se producían y que simplemente se quedaba la ventana del navegador en blanco.

El motivo por el cual no se visualizaban esos errores era porque la directiva display_errors estaba desactivada:
Determina si los errores deberían ser impresos en pantalla como parte de la salida o si deberían ocultarse al usuario.

por defecto su valor es OFF (desactivado), para cambiarlo solo hay que ir al php.ini (archivo de configuración de PHP) y cambiar su valor de OFF a ON.

Para saber donde se encuentra ese archivo basta con ejecutar el siguiente código:
<?php
   echo phpinfo()
?>

y el valor de "Configuration File (php.ini) Path" que aparece en la página que se genera, será la dirección que buscamos.

Para abrir el php.ini desde la consola en Ubuntu lo hacemos así:
sudo gedit /etc/php5/apache2/php.ini

nota:
Siempre que modifiques el php.ini si quieres que los cambios tengan efecto inmediato, debes reiniciar el servidor; Para el caso concreto de que uses Apache sobre Ubuntu, lo haces así (desde la terminal): sudo /etc/init.d/apache2 restart


Cuando instalas PHP en otro sistema operativo también vas a disponer de ese archivo de configuración, solo cambia el path, es decir, su ubicación.

También podemos configurar que errores se van a mostrar, eso lo hacemos con la directiva error_reporting.
Establece el nivel de notificación de errores

En PHP4 y PHP5 el valor predeterminado es E_ALL & ~E_NOTICE (cualquier error menos las anotaciones), en la versión 5.3 ya se incluye E_DEPRECATED, por defecto el valor es el siguiente:
; muestra toda clase de errores menos los E_DEPRECATED
error_reporting = E_ALL & ~E_DEPRECATED

Se puede personalizar de manera que se muestren solo los errores que queramos, eso lo haremos usando las constantes predefinidas por PHP.

Principales constantes:
E_ERROR  indica que se ha producido un error fatal que impide la ejecución del script.
E_WARNING indica una advertencia, la ejecución del script continua.
E_NOTICE  indica anotaciones sobre posibles errores, por ejemplo, variables no inicializadas, equivocaciones en los nombres de dichas variables, etc.

nota:
No se aconseja usar la visualización de errores si la pagina ya se encuentra en producción, ya que de lo contrario puede revelar información relevante, es decir, si la el sistema ya no se encuentra en periodo de prueba, lo recomendable es dejar la directiva display_errors en OFF.


Trabajando con la visualización de errores en tiempo de ejecución

Se puede dar el caso de que no tengamos acceso al archivo de configuración, PHP nos facilita algunas funciones para el manejo de errores cuando el sistema se este ejecutando, que bueno ¿verdad?

La función ini_set se usa para establecer u obtener el valor de una directiva de configuración.

El nuevo valor establecido se mantendrá durante la ejecución del script, y se restaurará cuando acabe el mismo.

// verificamos el status de la directiva
echo (!ini_get('display_errors') ? 'La directiva está desactivada' :
'la directiva está activada');

// cambiando el valor de la directiva en tiempo de ejecución
ini_set("display_errors","1");// 1 = On | 0 = Off

Usando error_reporting.
<?php

// Deshabilitar todo reporte de errores
error_reporting(0);

// Errores de ejecucion simples
error_reporting(E_ERROR | E_WARNING | E_PARSE);

// Reportar E_NOTICE puede ser bueno tambien (para reportar variables
// no inicializadas o capturar equivocaciones en nombres de variables ...)
error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE);

// Reportar todos los errores excepto E_NOTICE
// Este es el valor predeterminado en php.ini
error_reporting(E_ALL ^ E_NOTICE);

// Reportar todos los errores de PHP (el valor de bits 63 puede ser usado en PHP 3)
error_reporting(E_ALL);

// Lo mismo que error_reporting(E_ALL);
ini_set('error_reporting', E_ALL); 

error_reporting(E_ALL & ~(E_STRICT|E_NOTICE));

?> 

No hay que olvidar los tips de php.net
display_errors es una característica para apoyar su desarrollo y nunca debería usarse es sistemas de producción


Fuentes:
http://www.php.net

0 comentarios: Suscribete a los comentarios por RSS

Publicar un comentario

- Los comentarios están siendo moderados y serán publicados en la brevedad posible.