Errores de manejo
A veces su aplicación no se ejecutará como se supone que debe hacerlo, lo que provocará un error. Hay varias razones que pueden causar errores, por ejemplo:
- El servidor web podría quedarse sin espacio en disco
- Un usuario podría haber ingresado un valor no válido en un campo de formulario
- Es posible que el archivo o el registro de la base de datos al que intentaba acceder no exista
- Es posible que la aplicación no tenga permiso para escribir en un archivo en el disco
- Un servicio al que la aplicación necesita acceder podría no estar disponible temporalmente
Estos tipos de errores se conocen como errores de tiempo de ejecución, ya que se producen en el momento en que se ejecuta el script. Son distintos de los errores de sintaxis que deben corregirse antes de que se ejecute el script.
Una aplicación profesional debe tener las capacidades para manejar este error de tiempo de ejecución con gracia. Por lo general, esto significa informar al usuario sobre el problema de manera más clara y precisa.
Comprensión de los niveles de error
Por lo general, cuando hay un problema que impide que un script se ejecute correctamente, el motor PHP activa un error. Cada error está representado por un valor entero y una constante asociada. La siguiente tabla enumera algunos de los niveles de error comunes:
Nivel de error | Valor | Descripción |
---|---|---|
E_ERROR |
1 |
Un error fatal en tiempo de ejecución, que no se puede recuperar. La ejecución del script se detiene de inmediato. |
E_WARNING |
2 |
Una advertencia de tiempo de ejecución. No es fatal y la mayoría de los errores tienden a caer en esta categoría. La ejecución del script no se detiene. |
E_NOTICE |
8 |
Un aviso de tiempo de ejecución. Indique que el script encontró algo que posiblemente podría ser un error, aunque la situación también podría ocurrir cuando se ejecuta un script normalmente. |
E_USER_ERROR |
256 |
Un mensaje de error fatal generado por el usuario. Esto es como un E_ERROR , excepto que es generado por el script PHP usando la función en trigger_error() lugar del motor PHP. |
E_USER_WARNING |
512 |
Un mensaje de advertencia no fatal generado por el usuario. Esto es como un E_WARNING , excepto que es generado por el script PHP usando la función en trigger_error() lugar del PHP. motor |
E_USER_NOTICE |
1024 |
Un mensaje de aviso generado por el usuario. Esto es como un E_NOTICE , excepto que es generado por el script PHP usando la función en trigger_error() lugar del motor PHP. |
E_STRICT |
2048 |
No es estrictamente un error, pero se activa cuando PHP encuentra código que podría generar problemas o incompatibilidades de reenvío. |
E_ALL |
8191 |
Todos los errores y advertencias, excepto E_STRICT anteriores a PHP 5.4.0. |
Para obtener más niveles de error, consulte la referencia sobre niveles de error de PHP .
El motor PHP desencadena un error cada vez que encuentra un problema con su script, pero también puede desencadenar errores usted mismo para generar mensajes de error más fáciles de usar. De esta manera, puede hacer que su aplicación sea más sofisticada. La siguiente sección describe algunos de los métodos comunes utilizados para manejar errores en PHP:
Manejo básico de errores utilizando la die()
función
Considere el siguiente ejemplo que simplemente intenta abrir un archivo de texto para lectura solamente.
<?php
// Try to open a non-existent file
$file = fopen("sample.txt", "r");
?>
Si el archivo no existe, puede obtener un error como este:
Si seguimos algunos pasos simples, podemos evitar que los usuarios reciban dicho mensaje de error.
<?php
if(file_exists("sample.txt")){
$file = fopen("sample.txt", "r");
} else{
die("Error: The file you are trying to access doesn't exist.");
}
?>
Ahora, si ejecuta el script anterior, obtendrá el mensaje de error como este:
Como puede ver al implementar una simple verificación de si el archivo existe o no antes de intentar acceder a él, podemos generar un mensaje de error que sea más significativo para el usuario.
La die()
función utilizada anteriormente simplemente muestra el mensaje de error personalizado y termina el script actual si no se encuentra el archivo ‘sample.txt’.
Crear un controlador de errores personalizado
Puede crear su propia función de controlador de errores para tratar el error de tiempo de ejecución generado por el motor PHP. El controlador de errores personalizado le brinda una mayor flexibilidad y un mejor control sobre los errores, puede inspeccionar el error y decidir qué hacer con el error, puede mostrar un mensaje al usuario, registrar el error en un archivo o base de datos o enviarlo por correo electrónico -mail, intente solucionar el problema y continúe, salga de la ejecución del script o ignore el error por completo.
La función del controlador de errores personalizado debe poder manejar al menos dos parámetros (errno y errstr), sin embargo, opcionalmente puede aceptar tres parámetros adicionales (errfile, errline y errcontext), como se describe a continuación:
Parámetro | Descripción |
---|---|
Obligatorio : se requieren los siguientes parámetros | |
errno | Especifica el nivel del error, como un entero. Esto corresponde a la constante de nivel de error apropiado ( E_ERROR , E_WARNING y así sucesivamente) |
errstr | Especifica el mensaje de error como una cadena. |
Opcional : los siguientes parámetros son opcionales | |
errfile | Especifica el nombre de archivo del archivo de script en el que ocurrió el error, como una cadena |
errline | Especifica el número de línea en el que ocurrió el error, como una cadena |
errcontext | Especifica una matriz que contiene todas las variables y sus valores que existían en el momento en que ocurrió el error. Útil para depurar |
Aquí hay un ejemplo de una simple función personalizada de manejo de errores. Este controlador customError()
se activa cada vez que se produce un error, sin importar cuán trivial sea. Luego muestra los detalles del error al navegador y detiene la ejecución del script.
<?php
// Error handler function
function customError($errno, $errstr){
echo "<b>Error:</b> [$errno] $errstr";
}
?>
Debe indicarle a PHP que use su función de controlador de errores personalizada: simplemente llame a la función incorporada y set_error_handler()
pase el nombre de la función.
Registro de errores
Registrar mensajes de error en un archivo de texto
También puede registrar detalles del error en el archivo de registro, como este:
<?php
function calcDivision($dividend, $divisor){
if($divisor == 0){
trigger_error("calcDivision(): The divisor cannot be zero", E_USER_WARNING);
return false;
} else{
return($dividend / $divisor);
}
}
function customError($errno, $errstr, $errfile, $errline, $errcontext){
$message = date("Y-m-d H:i:s - ");
$message .= "Error: [" . $errno ."], " . "$errstr in $errfile on line $errline, ";
$message .= "Variables:" . print_r($errcontext, true) . "\r\n";
error_log($message, 3, "logs/app_errors.log");
die("There was a problem, please try again.");
}
set_error_handler("customError");
echo calcDivision(10, 0);
echo "This will never be printed.";
?>
Enviar mensajes de error por correo electrónico
También puede enviar un correo electrónico con los detalles del error utilizando la misma error_log()
función.
<?php
function calcDivision($dividend, $divisor){
if ($divisor == 0){
trigger_error("calcDivision(): The divisor cannot be zero", E_USER_WARNING);
return false;
} else{
return($dividend / $divisor);
}
}
function customError($errno, $errstr, $errfile, $errline, $errcontext){
$message = date("Y-m-d H:i:s - ");
$message .= "Error: [" . $errno ."], " . "$errstr in $errfile on line $errline, ";
$message .= "Variables:" . print_r($errcontext, true) . "\r\n";
error_log($message, 1, "webmaster@example.com");
die("There was a problem, please try again. Error report submitted to webmaster.");
}
set_error_handler("customError");
echo calcDivision(10, 0);
echo "This will never be printed.";
?>
Desencadenar un error
Aunque el motor PHP desencadena un error cada vez que encuentra un problema con su script, también puede desencadenar errores usted mismo. Esto puede ayudar a hacer que su aplicación sea más sólida, ya que puede señalar posibles problemas antes de que se conviertan en errores graves.
Para activar un error desde su script, llame a la trigger_error()
función, pasando el mensaje de error que desea generar:
Considere la siguiente función que calcula la división de los dos números.
Ejemplo
<?php
function calcDivision($dividend, $divisor){
return($dividend / $divisor);
}
// Calling the function
echo calcDivision(10, 0);
?>
Si se pasa un valor de cero (0) como $divisor
parámetro, el error generado por el motor PHP se verá así:
Este mensaje no parece muy informativo. Considere el siguiente ejemplo que usa la trigger_error()
función para generar el error.
Ejemplo
<?php
function calcDivision($dividend, $divisor){
if($divisor == 0){
trigger_error("The divisor cannot be zero", E_USER_WARNING);
return false;
} else{
return($dividend / $divisor);
}
}
// Calling the function
echo calcDivision(10, 0);
?>
Ahora el script genera este mensaje de error:
Como puede ver, el mensaje de error generado por el segundo ejemplo explica el problema más claramente en comparación con el anterior.
Te esperamos en los siguientes artículos en donde hablaremos mas acerca de estos temas, los cuales hoy en día son de vital importancia en el mundo de la tecnología.