PHP - Manejo de errores y excepciones

El manejo de errores es el proceso de detectar errores generados por su programa y luego tomar las medidas adecuadas. Si maneja los errores correctamente, puede tener muchas consecuencias imprevistas.

Es muy simple en PHP manejar errores.

Usando la función die ()

Mientras escribe su programa PHP, debe verificar todas las posibles condiciones de error antes de continuar y tomar las medidas adecuadas cuando sea necesario.

Intente seguir el ejemplo sin tener /tmp/test.xt archivo y con este archivo.

<?php
   if(!file_exists("/tmp/test.txt")) {
      die("File not found");
   }else {
      $file = fopen("/tmp/test.txt","r");
      print "Opend file sucessfully";
   }
   // Test of the code here.
?>

De esta forma puede escribir un código eficiente. Usando la técnica anterior, puede detener su programa siempre que se produzca un error y mostrar un mensaje más significativo y fácil de usar.

Definición de la función de gestión de errores personalizada

Puede escribir su propia función para manejar cualquier error. PHP le proporciona un marco para definir la función de manejo de errores.

Esta función debe poder manejar un mínimo de dos parámetros (nivel de error y mensaje de error) pero puede aceptar hasta cinco parámetros (opcionalmente: archivo, número de línea y contexto de error) -

Sintaxis

error_function(error_level,error_message, error_file,error_line,error_context);

No Señor Descripción de parámetros
1

error_level

Requerido: especifica el nivel de informe de error para el error definido por el usuario. Debe ser un número de valor.

2

error_message

Requerido: especifica el mensaje de error para el error definido por el usuario

3

error_file

Opcional: especifica el nombre del archivo en el que se produjo el error.

4

error_line

Opcional: especifica el número de línea en el que se produjo el error.

5

error_context

Opcional: especifica una matriz que contiene todas las variables y sus valores en uso cuando ocurrió el error

Posibles niveles de error

Estos niveles de informe de errores son los diferentes tipos de errores para los que se puede utilizar el controlador de errores definido por el usuario. Estos valores cab se utilizan en combinación con| operador

No Señor Constante y descripción Valor
1

.E_ERROR

Errores fatales en tiempo de ejecución. Se detiene la ejecución del script

1
2

E_WARNING

Errores de tiempo de ejecución no fatales. La ejecución del script no se detiene

2
3

E_PARSE

Errores de análisis en tiempo de compilación. Los errores de análisis solo deben ser generados por el analizador.

4
4

E_NOTICE

Avisos en tiempo de ejecución. El script encontró algo que podría ser un error, pero también podría suceder cuando se ejecuta un script normalmente.

8
5

E_CORE_ERROR

Errores fatales que ocurren durante la puesta en marcha inicial de PHP.

dieciséis
6

E_CORE_WARNING

Errores de tiempo de ejecución no fatales. Esto ocurre durante la puesta en marcha inicial de PHP.

32
7

E_USER_ERROR

Error fatal generado por el usuario. Esto es como un E_ERROR establecido por el programador usando la función de PHP trigger_error ()

256
8

E_USER_WARNING

Advertencia no fatal generada por el usuario. Esto es como un E_WARNING establecido por el programador usando la función de PHP trigger_error ()

512
9

E_USER_NOTICE

Aviso generado por el usuario. Esto es como un E_NOTICE establecido por el programador usando la función de PHP trigger_error ()

1024
10

E_STRICT

Avisos en tiempo de ejecución. Habilite para que PHP sugiera cambios en su código que garantizarán la mejor interoperabilidad y compatibilidad con versiones posteriores de su código.

2048
11

E_RECOVERABLE_ERROR

Error fatal detectable. Esto es como un E_ERROR pero puede ser detectado por un identificador definido por el usuario (ver también set_error_handler ())

4096
12

E_ALL

Todos los errores y advertencias, excepto el nivel E_STRICT (E_STRICT será parte de E_ALL a partir de PHP 6.0)

8191

Todo el nivel de error anterior se puede configurar utilizando la siguiente función de biblioteca incorporada de PHP, donde el nivel cab es cualquiera de los valores definidos en la tabla anterior.

int error_reporting ( [int $level] )

A continuación se muestra la forma en que puede crear una función de manejo de errores:

<?php
   function handleError($errno, $errstr,$error_file,$error_line) {
      echo "<b>Error:</b> [$errno] $errstr - $error_file:$error_line";
      echo "<br />";
      echo "Terminating PHP Script";
      
      die();
   }
?>

Una vez que defina su controlador de errores personalizado, debe configurarlo utilizando la biblioteca incorporada de PHP set_error_handlerfunción. Ahora examinemos nuestro ejemplo llamando a una función que no existe.

<?php
   error_reporting( E_ERROR );
   
   function handleError($errno, $errstr,$error_file,$error_line) {
      echo "<b>Error:</b> [$errno] $errstr - $error_file:$error_line";
      echo "<br />";
      echo "Terminating PHP Script";
      
      die();
   }
   
   //set error handler
   set_error_handler("handleError");
   
   //trigger error
   myFunction();
?>

Manejo de excepciones

PHP 5 tiene un modelo de excepción similar al de otros lenguajes de programación. Las excepciones son importantes y proporcionan un mejor control sobre el manejo de errores.

Expliquemos la nueva palabra clave relacionada con las excepciones.

  • Try- Una función que usa una excepción debe estar en un bloque "try". Si la excepción no se activa, el código continuará con normalidad. Sin embargo, si se activa la excepción, se "lanza" una excepción.

  • Throw- Así es como se activa una excepción. Cada "lanzamiento" debe tener al menos una "captura".

  • Catch - Un bloque "catch" recupera una excepción y crea un objeto que contiene la información de la excepción.

Cuando se lanza una excepción, el código que sigue a la declaración no se ejecutará y PHP intentará encontrar el primer bloque de captura coincidente. Si no se detecta una excepción, se emitirá un error fatal de PHP con una "Excepción no detectada ...

  • Una excepción puede ser lanzada y capturada ("capturada") dentro de PHP. El código puede estar rodeado en un bloque de prueba.

  • Cada intento debe tener al menos un bloque de captura correspondiente. Se pueden usar varios bloques de captura para detectar diferentes clases de excepciones.

  • Las excepciones se pueden lanzar (o volver a lanzar) dentro de un bloque de captura.

Ejemplo

A continuación se muestra el fragmento de código, copie y pegue este código en un archivo y verifique el resultado.

<?php
   try {
      $error = 'Always throw this error';
      throw new Exception($error);
      
      // Code following an exception is not executed.
      echo 'Never executed';
   }catch (Exception $e) {
      echo 'Caught exception: ',  $e->getMessage(), "\n";
   }
   
   // Continue execution
   echo 'Hello World';
?>

En el ejemplo anterior, la función $ e-> getMessage se usa para obtener un mensaje de error. Existen las siguientes funciones que se pueden utilizar desdeException clase.

  • getMessage() - mensaje de excepción

  • getCode() - código de excepción

  • getFile() - nombre de archivo de origen

  • getLine() - línea fuente

  • getTrace() - n matriz del backtrace ()

  • getTraceAsString() - cadena formateada de traza

Creación de un controlador de excepciones personalizado

Puede definir su propio controlador de excepciones personalizado. Utilice la siguiente función para establecer una función de controlador de excepciones definida por el usuario.

string set_exception_handler ( callback $exception_handler )

aquí exception_handleres el nombre de la función que se llamará cuando se produzca una excepción no detectada. Esta función debe definirse antes de llamar a set_exception_handler ().

Ejemplo

<?php
   function exception_handler($exception) {
      echo "Uncaught exception: " , $exception->getMessage(), "\n";
   }
	
   set_exception_handler('exception_handler');
   throw new Exception('Uncaught Exception');
   
   echo "Not Executed\n";
?>

Verifique el conjunto completo de funciones de manejo de errores en Funciones de manejo de errores de PHP