¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí
¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí
  1. Libros
  2. PHP y MySQL
  3. Gestionar los errores en un script PHP
Extrait - PHP y MySQL Domine el desarrollo de un sitio web dinámico e interactivo (5ª edición)
Extractos del libro
PHP y MySQL Domine el desarrollo de un sitio web dinámico e interactivo (5ª edición) Volver a la página de compra del libro

Gestionar los errores en un script PHP

Visión de conjunto

Un error en un script PHP puede manifestarse de dos maneras, simultáneas en algunos casos:

  • por un valor de retorno particular de la función PHP en la que se ha producido el error;

  • por un mensaje enviado directamente en la página.

Ejemplos

Función

Comportamiento en caso de error

require

Si el archivo pasado como parámetro no existe, se muestra un mensaje, pero la función no devuelve ningún código particular. 

mysqli_query

Si el servidor MySQL devuelve un error en la ejecución de una consulta, no se muestra ningún mensaje, pero la función devuelve FALSE (pudiendo conocer el tipo de error mediante otras funciones).

mysqli_connect

Si el servidor MySQL devuelve un error en la conexión, se muestra un mensaje y la función devuelve FALSE (pudiendo conocer el tipo de error mediante otras funciones).

Gestionar los errores en un script PHP consiste, por lo tanto, y de manera general, en establecer un mecanismo que permita detectar un error con el fin de mostrar por sí mismo un mensaje en lugar del mensaje mostrado directamente por PHP.

Los mensajes de error de PHP

Los mensajes de error (o de alerta) mostrados por PHP tienen un nivel correspondiente a su relevancia:

Valor

Constante asociada

Descripción

1

E_ERROR

Error grave de ejecución (mensaje «fatal error: …»). El script se interumpe. Ejemplos: llamada a una función que no existe, archivo mencionado en la instrucción require que no existe.

2

E_WARNING

Alerta de ejecución (mensaje «warning: …»). El script continúa. Ejemplo: intento de apertura, con fopen, de un archivo que no existe, fallo al abrir una conexión MySQL... En general, la continuación del script provoca otros mensajes del mismo tipo.

4

E_PARSE

Error de compilación («Parse error: …»). El script no se ejecuta. Ejemplo: olvido de un punto y coma, de un paréntesis de cierre…

8

E_NOTICE

Advertencia durante la ejecución (mensaje «Notice: …»). De manera predeterminada, PHP está configurado para no mostrar estas advertencias. El script continúa.

16

E_CORE_ERROR

Error grave durante la inicialización de PHP. El script no se ejecuta.

32

E_CORE_WARNING

Alerta durante la inicialización de PHP.

64

E_COMPILE_ERROR

Error grave durante la compilación. El script no se ejecuta.

128

E_COMPILE_WARNING

Alerta durante la compilación.

256

E_USER_ERROR

Error generado por el programador. El script se interrumpe.

512

E_USER_WARNING

Alerta generada por el programador.

1024

E_USER_NOTICE

Advertencia generada por el programador.

2048

E_STRICT

Consejos durante la ejecución. Autoriza a PHP a sugerir modificaciones para mejorar la portabilidad del código, sobre todo con vistas a las futuras versiones.

4096

E_RECOVERABLE_ERROR

Error grave recuperable. Si el error no es gestionado por el programador (véase más adelante), el script se interrumpe.

8192

E_DEPRECATED

Alertas de ejecución. Permite mostrar alertas sobre código que utiliza funcionalidades que van a desaparecer y que, por lo tanto, que podría dejar de funcionar en futuras versiones.

16384

E_USER_DEPRECATED

Alerta por previsión de desaparición de funcionalidades generada por el desarrollador.

32767

E_ALL...

Las funciones de gestión de los errores

PHP ofrece varias funciones que permiten gestionar correctamente los errores en un script:

Nombre

Rol

error_reporting

Define los niveles de error que muestra PHP.

error_log

Envía un mensaje de error hacia un destino (un archivo, por ejemplo).

set_error_handler

Indica el nombre de una función de usuario para gestionar errores.

restore_error_handler

Activa el antiguo manejador de errores.

set_exception_handler

Indica el nombre de una función de usuario que se va a utilizar como gestor de excepciones.

restore_esception_handler

Reactiva el antiguo gestor de excepciones.

trigger_error, user_error

Desencadena un error definido por el programador (user_error es un alias de trigger_error).

error_get_last

Devuelve información sobre el último error encontrado en el script.

error_clear_last

Elimina el último error encontrado en el script.

También hay dos funciones, debug_backtrace y debug_print_backtrace, que permiten obtener información útil para la puesta a punto (contexto de ejecución y pila de llamadas); para saber más sobre estas dos funciones, lea la documentación.

Además, el operador @, colocado delante del nombre de una función, permite eliminar la visualización de los mensajes generados en caso de error en la función.

Ejemplo

<?php 
$archivo = @fopen('/tmp/infos.txt','r'); // el archivo no existe 
?> 

Durante la ejecución de este script, no se muestra ningún mensaje aunque el archivo solicitado no exista.

Desde la versión 8, el operador @ ya no suprime la visualización de los errores graves que producen la detención del script (E_ERROR, E_PARSE, E_CORE_ERROR, E_COMPILE_ERROR, E_USER_ERROR, E_RECOVERABLE_ERROR). Antes de la versión 8, se detenía la ejecución del script, pero no se mostraba ningún mensaje.

Ejemplo

<?php 
$archivo = @fopen('/tmp/info.txt','r'); 
$texto = @fread($archivo,100); 
@fclose($archivo); 
?> 

Resultado

Fatal error: Uncaught TypeError: fread(): Argument #1 ($stream) must be 
of type resource, bool given in /app/scripts/index.php:3 Stack trace: 
#0 /app/scripts/index.php(3): fread(false, 100) #1 {main} thrown in 
/app/scripts/index.php on line 3 

En este ejemplo, el descriptor del archivo que devuelve la llamada a la función fopen contiene...