Avisar por email de errores 500 o excepciones con PHP

Tiempo de lectura: 2 minutos

Cuando desarrollamos aplicaciones web en PHP, es esencial manejar los errores de manera efectiva para garantizar una experiencia de usuario fluida y para que los administradores del sistema puedan ser notificados rápidamente en caso de problemas. En este tutorial, aprenderemos a implementar un sistema básico de manejo de excepciones que enviará automáticamente un correo electrónico al administrador cuando ocurra un error 500 en nuestra aplicación.

Paso 1: Configuración del Archivo handler.php

En primer lugar, crearemos un archivo llamado handler.php que contendrá nuestras funciones de manejo de excepciones y envío de correos. Este archivo se puede incluir en todos los scripts de nuestra aplicación.

<?php

// Establecer la dirección de correo electrónico a la que se enviará el mensaje
$destinatario = 'contacto@email.com';

// Función para enviar un correo electrónico
function enviarCorreo($mensaje, $destinatario) {
    $asunto = 'Error 500 en el sitio web';
    $cabeceras = 'From: webmaster@example.com' . "\r\n" .
                 'Reply-To: webmaster@example.com' . "\r\n" .
                 'X-Mailer: PHP/' . phpversion();

    // Utiliza la función mail() de PHP para enviar el correo
    mail($destinatario, $asunto, $mensaje, $cabeceras);
}

// Función para manejar excepciones
function manejarExcepcion($excepcion) {
    // Obtener información sobre la excepción
    $mensaje = 'Se ha producido un error en el sitio web.' . "\n\n";
    $mensaje .= 'Mensaje de error: ' . $excepcion->getMessage() . "\n";
    $mensaje .= 'Archivo: ' . $excepcion->getFile() . "\n";
    $mensaje .= 'Línea: ' . $excepcion->getLine() . "\n";
    
    // Enviar un correo electrónico con la información del error
    enviarCorreo($mensaje, $GLOBALS['destinatario']);

    // Puedes registrar el error en algún otro lugar, como un archivo de registro

    // Mostrar un mensaje genérico al usuario (opcional)
    echo 'Se ha producido un error. El administrador ha sido notificado.';

    // Puedes redirigir al usuario a una página de error personalizada si lo deseas
    // header('Location: error.php');
}

// Establecer la función de manejo de excepciones personalizada
set_exception_handler('manejarExcepcion');

// Generar un error 500 (por ejemplo, intentar acceder a una variable no definida)
echo $variableNoDefinida;

?>

Paso 2: Inclusión del Archivo handler.php en Tus Scripts PHP

Ahora, en cada uno de tus scripts PHP, incluye el archivo handler.php al principio para habilitar el manejo de excepciones y el envío de correos electrónicos.

// index.php

<?php

// Incluir el archivo handler.php
include 'handler.php';

// Resto del código de tu script principal
// ...

// Generar un error 500 (por ejemplo, intentar acceder a una variable no definida)
echo $variableNoDefinida;

?>
// otro_script.php

<?php

// Incluir el archivo handler.php
include 'handler.php';

// Resto del código de tu otro script
// ...

// Generar un error 500 (por ejemplo, intentar acceder a una variable no definida)
echo $otraVariableNoDefinida;

?>

Si en vez de enviar por email, queremos mostrar el error por consola:

    $fechaActual = date('Y-m-d H:i:s');
    $cadenaError = $fechaActual .  $mensaje;
    //Sacar log por consola (docker)
    file_put_contents('php://stdout', $cadenaError . "\n");

Conclusión:

Con estos simples pasos, has implementado un sistema básico, pero efectivo de manejo de excepciones en PHP que enviará automáticamente correos electrónicos al administrador cuando se produzca un error 500 en tu aplicación. Personaliza las funciones según tus necesidades específicas y ten en cuenta que este es solo un punto de partida; puedes expandir y mejorar esta funcionalidad según los requisitos de tu proyecto.

¡Ahora estás mejor equipado para mantener y administrar tu aplicación PHP de manera más efectiva!

Deja un comentario