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