23 Julio 2007

Manejo de errores en PHP

Por Abel

Si lo que buscabas era manejo de excepciones con try-catch, entonces no es este tu lugar. Aquí explicaré brevemente cómo manejar errores en PHP. ¿Cuál es la diferencia? Bueno, con excepciones lo que se quiere controlar es el comportamiento de nuestra aplicación validando que todo salga como se planeó por ejemplo: validar que una división nunca se haga por cero, hacer algo si falla una conexion a una base de datos entre otras. Mientras que los errores a los que nos enfocaremos aquí serán errores de parsing. Los errores de parsing pueden ser de léxico, sintácticos o semánticos.

Por ejemplo un error de léxico podría ser al escribir mal alguna sentencia de control:

$x = 1;
whle ( $x < 10 ) {
	echo $x;
	$x++;
}

El error en whle detendrá la ejecución.

Un ejemplo de error sintáctico sería cuando nos falta algo o le pusimos algo de más a nuestro código, algo de lo que el parser se quejaría.

while ( $x < 10 ) {
	echo $x
	$x++;
}

La falta del punto-y-coma provocará un error fatal.

Por último, un error de semántica se da cuando algo en el código no tiene lógica. Por ejemplo:

$x = 10;
while ( $x == 'hola' ) {
	echo $x;
	$x++;
}

No se puede comparar un entero con un string.

A veces movemos y movemos el código y sin querer dejamos “huecos” y “cosas repetidas” y al probar nuestra aplicación o simple página nos damos cuenta de que tenemos muchos errores. Si estamos en fase de desarrollo entonces esto nos va muy bien porque así podemos estar arreglando todo mientras vamos descubriendo los errores. Pero y ¿si el “trabajo” no era para nosotros sino para agluien mas?

La solución es usar la directiva de reporte de errores de PHP. Con ellas, y como desarrolladores de un sistema creado en PHP tenemos la habilidad de decidir si el usuario final puede o no ver los errores. Algunas configuraciones de los errores anteriormente mencionado se hacen en el archivo de configuración php.ini. Algunas de las funciones mas importantes son: error_reporting, display_errors y log_errors.

La función error_reporting() recibe un entero como parámetro y retorna otro entero. Los valores que recibe vienen dados en constantes predefinidas de PHP y el valor retornado es el antiguo nivel de reporte.

Por ejemplo, cuando estamos desarrollando es bueno conocer todos los errores. A veces usamos una variable sin definirla primero (PHP no se queja de ellos, pero aunque no lo creas eso produce un error de tipo E-NOTICE). Todos estos tipos de errores que por defecto no se muestran porque PHP4 y PHP5 vienen preconfigurados así:

	error_reporting( E_ALL & ~E_NOTICE );

Lo que significa que va a reportar todos menos noticias. Puedes configurarlo para que aparezcan las noticias simplemente llamando a error_repoting y mandandole como parámetro E-ALL.

	error_reporting( E_ALL );

En el registro de funciones y gestión de errores de php.net encontramos una explicación más amplia de todos los posibles valores. Ahora bien, ¿cómo ocultamos todos los errores? Simplemente poniendo un cero como parámetro:

	error_reporting( 0 );

En ambientes de producción, no es recomendable que el cliente pueda ver los errores o bugs que probablemente van a aparecer. Para ocultarlos y llevar un registro de ellos podemos establecer el reporte de errores a cero y además podemos configurar nuestro php.ini para que guarde un registro de errores al que podemos acceder más tarde y arreglarlos sin que el usuario final se dé cuenta. En el php.ini solo encenderiamos la directiva log_errors, para que qude así:

	log_errors = on;

En fín, son muchas las posibilidades, aquí solo muestro las más fáciles y comunes. Después haré un microtutorial para el manejo de excepciones en PHP, claro, orientado a objetos.


Technorati tags: , ,


Entradas posiblemente relacionadas:


Este artículo fue escrito el 23 de Julio de 2007 y se encuentra en la(s) categoría(s) de Microtutoriales, PHP. Puedes seguir las respuestas a esta entrada a traves del Feed RSS. También puedes dejar un comentario, o hacer un trackback desde tu propio blog.

Actualmente hay 4 comentarios para “Manejo de errores en PHP”

Deja el tuyo.

  1. 1

    Francisco I. Leyva:
    Julio 23rd, 2007

    Interesante.. y útil :O
    Se nota la influencia del Dr. Zatarain jaja =)
    Saludos. =)

    PD. Cuál es la estructura whle? xD

  2. 2

    Abel:
    Julio 23rd, 2007

    Jaja sí… en realidad los errores son WARNING, FATAL ERROR y NOTICE. Pero para una mejor comprensión mejor los dividí como cualquier otro lenguaje de programación.

    No hay sentencia whle, era para ejemplificar que al escribir algo mal se produce un error. :-|

  3. 3

    nesok:
    Julio 23rd, 2007

    :D Explicación Nice, salu2

  4. 4

    Nachox:
    Julio 25th, 2007

    Hola Abel.

    Gracias por tus correcciones a los códigos de mis artículos. La verdad esos códigos los escribí por el año 2003 y cuando los publiqué olvidé actualizarlos, solo revisé su funcionamiento.

    Saludos.

    Nacho.

Deja un comentario

  • Ventana al cosmos

  • Apollo 17: Anaglifo de asientos VIP

  • Publicidad