Ejercicios de Gestión de Excepciones

Ejemplo de Excepción

Basándote en el código siguiente:

<?php
$email = "someoneexample.com";
$patron = "/^[a-z0-9]+([\.]?[a-z0-9_-]+)*@[a-z0-9]+([\.-]+[a-z0-9]+)*\.[a-z]{2,}$/";

try
{
   try {
      if (!preg_match($patron, $email))
         throw new Exception($email,1);
      if (strpos($email, "example") !== FALSE)
         throw new EmailException ($email,2);
      echo "Llego";
   }
   catch(Exception $e) {
      //relanzamos la excepcion
      throw new EmailException($email, $e->getCode());
   }
   //si llego aquí es que el email es correcto
   echo "Llego";
}
catch (EmailException $e) {
   echo $e;
}
?>

Crea la definición de la clase **EmailException** que extienda de la clase base Exception reemplazando además el método __toString(). Dentro de dicho método, según el código de error, tienes que mostrar un mensaje de error distinto (usa un switch que compruebe el código, construya la cadena y que la devuelva con el return). Si el código es:

  • 1: Excepción 1 : "XXX" no es una cuenta de E-Mail válida.
  • 2: Excepción 2: Dominio no permitido.

Añade un método público a la clase EmailException llamado RegistraError() que lo que hace es llamar a la función error_log de PHP (mira en la ayuda de PHP) para almacenar en el fichero de log del servidor el mensaje "Se ha producido una excepción en la línea" . . " del fichero " . . Añade la llamada al método después de imprimir la excepción (echo $e) y comprueba que efectivamente se almacena la excepción en el fichero "error.log" definido (c:/wamp/logs/php_error.log)

Fíjate en el fichero **php.ini** donde está definida la directiva ** error_log:**

; Log errors to specified file.
error_log = c:/wamp/logs/php_error.log

Este ejemplo no lo puedes comprobar en el servidor de proyectos, por lo que sube a la carpeta correspondiente una captura de pantalla de tu PC donde quede evidenciado que has realizado correctamente el ejercicio.

Añadir excepciones básicas al fichero procesar_pedido.php

Descarga el fichero llamado "plantillas_sesion09.zip" de moodle. Dicho fichero contiene un formulario de pedidos similar al de la sesión de arrays y un fichero PHP llamado "procesar_pedido.php" que recogerá los datos del formulario y los guardará en el fichero "pedidos.txt". En el código de dicho fichero hay varias instrucciones que muestran errores cuando se producen algún tipo de error.

Esas funciones son:

Habrá que envolver en un bloque try-catch las instrucciones que pueden ser susceptibles de producir algún tipo de error (desde que se abre el fichero hasta que se cierra) Hay que crear tres clases que hereden de la clase Exception. Las clases a crear serán:

  • FileOpenException: generar esta excepción si no se puede abrir el fichero "pedidos.txt"
  • FileLockException: generar esta excepción si no se puede bloquear el fichero en exclusividad en modo escritura.
  • FileWriteException: generar si no se puede escribir en el fichero.

Cada clase debe heredar de la clase padre Exception y reemplazar el método __toString() por el siguiente mensaje:

en la línea del fichero .

Todas la clases deben escribirse en un fichero llamado "file_exceptions.php" y será requerido dentro del fichero procesar_pedido.php. Crea dos bloques catch, uno para la excepción FileOpenException y otra para la clase Exception (no hace falta poner un catch para cada excepción, ya que, todas las clases creadas heredan de la clase Exception)

Al principio del fichero establece la directiva "display_errors" a off con la función **ini_set()**. Ojo, cuidado porque esa función desactiva la visualización de los errores. Busca información en el manual de PHP para entender para qué sirve la función ini_set() y si desde dicha función se pueden modificar todas las propiedades del fichero php.ini ¿Por que no se puede?.

Haz pruebas para comprobar que se lanzan cada una de las excepciones:

  • Para probar FileOpenException puedes cambiar las propiedades del archivo a que sea de sólo lectura.
  • Para probar FileLockException puedes pasarle el puntero $fp por $fs
  • Para probar FileWriteException abre el fichero con fopen en modo lectura y comprueba que no puedes escribir en él.

(OPTATIVO) Añadir más excepciones a "procesar_pedido.php"

Añadir dos Excepciones más al fichero "procesar_pedido.php". Dichas excepciones son:

  • FileUnLockException -> para cuando no se he desbloqueado correctamente el archivo.
  • FileCloseException -> cuando no se ha cerrado correctamente el archivo

Realiza varias pruebas para comprobar que funciona.

Mira la documentación de la función date() y cambia, antes de guardarlo en el fichero, el formato de la fecha por el formato siguiente **AAAA-MM-DD;HH:MM:SS**.

results matching ""

    No results matching ""