Customize Consent Preferences

We use cookies to help you navigate efficiently and perform certain functions. You will find detailed information about all cookies under each consent category below.

The cookies that are categorized as "Necessary" are stored on your browser as they are essential for enabling the basic functionalities of the site. ... 

Always Active

Necessary cookies are required to enable the basic features of this site, such as providing secure log-in or adjusting your consent preferences. These cookies do not store any personally identifiable data.

No cookies to display.

Functional cookies help perform certain functionalities like sharing the content of the website on social media platforms, collecting feedback, and other third-party features.

No cookies to display.

Analytical cookies are used to understand how visitors interact with the website. These cookies help provide information on metrics such as the number of visitors, bounce rate, traffic source, etc.

No cookies to display.

Performance cookies are used to understand and analyze the key performance indexes of the website which helps in delivering a better user experience for the visitors.

No cookies to display.

Advertisement cookies are used to provide visitors with customized advertisements based on the pages you visited previously and to analyze the effectiveness of the ad campaigns.

No cookies to display.

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.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
<?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;
?>
<?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; ?>
<?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.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
// 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;
?>
// 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; ?>
// 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;

?>
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
// 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;
?>
// 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; ?>
// 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:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
$fechaActual = date('Y-m-d H:i:s');
$cadenaError = $fechaActual . $mensaje;
//Sacar log por consola (docker)
file_put_contents('php://stdout', $cadenaError . "\n");
$fechaActual = date('Y-m-d H:i:s'); $cadenaError = $fechaActual . $mensaje; //Sacar log por consola (docker) file_put_contents('php://stdout', $cadenaError . "\n");
    $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!

0

Deja un comentario