El manejo de errores por defecto en PHP es muy simple. Un mensaje de error con el nombre de archivo, número de línea y un mensaje que describe el error se envía al navegador.
Control de errores de PHP
Al crear secuencias de comandos y aplicaciones web, gestión de errores es una parte importante. Si el código carece de código de comprobación de errores, el programa puede parecer muy poco profesional y que puede estar abierto a riesgos de seguridad.
Este tutorial contiene algunos de los errores más comunes control de los métodos en PHP.
Vamos a mostrar los diferentes métodos de tratamiento de errores:
- Sencillo " die() " declaraciones
- errores personalizados y disparadores de error
- Error al reportar
Básicas de gestión de error: Uso de la die() función
El primer ejemplo muestra una secuencia de comandos simple que se abre un archivo de texto:
<?php
$file=fopen("welcome.txt","r");
?>
Si no existe el archivo podría obtener un error como este:
Warning : fopen(welcome.txt) [function.fopen]: failed to open stream:
No such file or directory in C:\webfolder\test.php on line 2
Para evitar que el usuario un mensaje de error similar a la anterior, probamos si el archivo existe antes de intentar acceder a ella:
<?php
if(!file_exists("welcome.txt")) {
die("File not found");
}
else {
$file=fopen("welcome.txt","r");
}
?>
Ahora bien, si no existe el archivo se obtiene un error como este:
File not found
El código anterior es más eficiente que el código anterior, ya que utiliza un simple mecanismo de manejo de errores para detener el guión tras el error.
Sin embargo, sólo tiene que parar el guión no es siempre el camino correcto a seguir. Vamos a echar un vistazo a las funciones de PHP alternativas para el manejo de errores.
La creación de un controlador de errores personalizado
La creación de un controlador de errores personalizado es bastante simple. Sólo tendrá que crear una función especial que se puede llamar cuando se produce un error en PHP.
Esta función debe ser capaz de manejar un mínimo de dos parámetros (nivel de error y el mensaje de error), pero puede aceptar hasta cinco parámetros (optionally: file, line-number, and the error context) :
Sintaxis
error_function(error_level,error_message,
error_file,error_line,error_context)
Parámetro | Descripción |
---|---|
error_level | Necesario. Especifica el nivel de informe de error para el error definido por el usuario. Debe ser un número de valor. Consulte la tabla siguiente para los posibles niveles de informe de error |
error_message | Necesario. Especifica el mensaje de error para el error definido por el usuario |
error_file | Opcional. Especifica el nombre de archivo en el que se produjo el error |
error_line | Opcional. Especifica el número de línea en el que se produjo el error |
error_context | Opcional. Especifica una matriz que contiene todas las variables y sus valores, en uso cuando se produjo el error |
Error niveles de informe
Estos niveles de informe de error son los diferentes tipos de error al controlador de error definido por el usuario se puede utilizar para:
Valor | Constante | Descripción |
---|---|---|
2 | E_WARNING | No fatales errores de ejecución. La ejecución del script no se detiene |
8 | E_NOTICE | avisos en tiempo de ejecución. El script encontró algo que podría ser un error, pero también podría ocurrir cuando se ejecuta un script normalmente |
256 | E_USER_ERROR | Fatal error generado por el usuario. Esto es como un E_ERROR establecido por el programador utilizando la función de PHP trigger_error() |
512 | E_USER_WARNING | No fatal generado por los usuarios de advertencia. Esto es como un E_WARNING establecido por el programador utilizando la función de PHP trigger_error() |
1024 | E_USER_NOTICE | aviso generado por el usuario. Esto es como un E_NOTICE establecido por el programador utilizando la función de PHP trigger_error() |
4096 | E_RECOVERABLE_ERROR | capturable error fatal. Esto es como un E_ERROR pero puede ser atrapado por un mango definida por el usuario (see also set_error_handler() ) |
8191 | E_ALL | Todos los errores y advertencias (E_STRICT became a part of E_ALL in PHP 5.4) |
Ahora vamos a crear una función para controlar los errores:
function customError($errno, $errstr) {
echo "<b>Error:</b> [$errno] $errstr<br>";
echo "Ending Script";
die();
}
El código anterior es una simple función de control de errores. Cuando se activa, se pone el nivel de error y un mensaje de error. A continuación, emite el nivel de error y el mensaje y termina el guión.
Ahora que hemos creado una función de control de errores tenemos que decidir cuando debe ser activado.
Conjunto controlador de errores
El gestor de errores por defecto de PHP está construido en el gestor de errores. Vamos a hacer que la función anterior del controlador de errores por defecto para la duración de la secuencia de comandos.
Es posible cambiar el gestor de errores para solicitar sólo algunos errores, de esa manera la secuencia de comandos puede controlar errores diferentes en diferentes maneras. Sin embargo, en este ejemplo vamos a utilizar nuestro gestor de errores a medida para todos los errores:
set_error_handler("customError");
Como queremos que nuestra función personalizada para manejar todos los errores, la set_error_handler() sólo se necesita un parámetro, un segundo parámetro podría ser añadido para especificar un nivel de error.
Ejemplo
Probando el controlador de errores al tratar de variable de salida que no existe:
<?php
//error handler function
function customError($errno, $errstr) {
echo "<b>Error:</b> [$errno] $errstr";
}
//set error handler
set_error_handler("customError");
//trigger error
echo($test);
?>
La salida del código anterior debería ser algo como esto:
Error: [8] Undefined variable: test
Desencadenar un error
En un guión donde los usuarios pueden introducir datos es útil para provocar errores cuando se produce una entrada ilegal. En PHP, esto se hace por el trigger_error() función.
Ejemplo
En este ejemplo se produce un error si el "test" variable es más grande que "1" :
<?php
$test=2;
if ($test>=1)
{
trigger_error("Value must be 1 or below");
}
?>
La salida del código anterior debería ser algo como esto:
Notice : Value must be 1 or below
in C:\webfolder\test.php on line 6
Un error puede ser activado en cualquier lugar que desee en un guión, y mediante la adición de un segundo parámetro, puede especificar lo que se activa el nivel de error.
tipos de errores posibles:
- E_USER_ERROR - Error en tiempo de ejecución generados por los usuarios fatal. Los errores que no pueden ser recuperados a partir. La ejecución del script se detiene
- E_USER_WARNING - no fatal generado por los usuarios de alerta en tiempo de ejecución. La ejecución del script no se detiene
- E_USER_NOTICE - por defecto. notificación en tiempo de ejecución generado por el usuario. El script encontró algo que podría ser un error, pero también podría ocurrir cuando se ejecuta un script normalmente
Ejemplo
En este ejemplo un E_USER_WARNING se produce si el "test" variable es más grande que "1" . Si se produce un E_USER_WARNING usaremos nuestro manipulador personalizado y poner fin a la secuencia de comandos:
<?php
//error handler function
function customError($errno, $errstr) {
echo "<b>Error:</b> [$errno] $errstr<br>";
echo "Ending Script";
die();
}
//set error handler
set_error_handler("customError",E_USER_WARNING);
//trigger error
$test=2;
if ($test>=1) {
trigger_error("Value must be 1 or below",E_USER_WARNING);
}
?>
La salida del código anterior debería ser algo como esto:
Error: [512] Value must be 1 or below
Ending Script
Ahora que hemos aprendido a crear nuestros propios errores y cómo activarlas, permite echar un vistazo a el registro de errores.
registro de errores
Por defecto, PHP envía un registro de errores de sistema de registro del servidor o un archivo, dependiendo de cómo la configuración error_log en el archivo php.ini. Al utilizar el error_log() la función que puede enviar registros de errores en un archivo especificado o un destino remoto.
El envío de mensajes de error a sí mismo por correo electrónico puede ser una buena manera de conseguir la notificación de errores específicos.
Enviar un mensaje de error por E-Mail
En el siguiente ejemplo vamos a enviar un e-mail con un mensaje de error y terminar el guión, si se produce un error específico:
<?php
//error handler function
function customError($errno, $errstr) {
echo "<b>Error:</b> [$errno] $errstr<br>";
echo "Webmaster has been notified";
error_log("Error: [$errno] $errstr",1,
"[email protected]","From: [email protected]");
}
//set error handler
set_error_handler("customError",E_USER_WARNING);
//trigger error
$test=2;
if ($test>=1) {
trigger_error("Value must be 1 or below",E_USER_WARNING);
}
?>
La salida del código anterior debería ser algo como esto:
Error: [512] Value must be 1 or below
Webmaster has been notified
Y el correo recibido en el código anterior es el siguiente:
Error: [512] Value must be 1 or below
Esto no debe ser utilizado con todos los errores. errores regulares deben ser registrados en el servidor mediante el sistema por defecto de PHP registro.