¿Te gustaría aprender a PHP desde cero?
Tenemos los cursos que necesitas.¡Haz clic aquí!

 

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_STRICTanteriores 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:

Advertencia: fopen (sample.txt) [function.fopen]: no se pudo abrir la secuencia: No existe tal archivo o directorio en C: \ wamp \ www \ project \ test.php en la línea 2

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:

Error: el archivo al que está intentando acceder no existe.

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_ERRORE_WARNINGy 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.

<?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);
?>

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:

trigger_error (“Hubo un problema”);

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 $divisorparámetro, el error generado por el motor PHP se verá así:

Advertencia: División por cero en C: \ wamp \ www \ project \ test.php en la línea 3

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:

Advertencia: El divisor no puede ser cero en C: \ wamp \ www \ project \ error.php en la línea 4

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.

¿Te gustaría aprender a PHP desde cero?
Tenemos los cursos que necesitas.¡Haz clic aquí!
About Author

NGuerrero

0 0 votos
Article Rating
Suscribir
Notificar de
guest
0 Comments
Comentarios.
Ver todos los comentarios
0
¿Te gusta este articulo? por favor comentax