Comment envoyer un mail lors d'une erreur sur le site ?

Réponses rédigées par Antoine
Dernière mise à jour : 2023-02-03 11:30:49
Thèmes : php - mail - erreur-404 - erreur-500
Question

Bonjour,

J'ai ce code dans un fichier appelé error.php.

[code=php]
<?php
// Définir une fonction pour gérer les erreurs
function errorHandler($errno, $errstr, $errfile, $errline) {
    // Envoyer un email avec les détails de l'erreur
    mail('admin@example.com', 'Erreur sur le site', $errstr);
    mail('admin@example.com', 'Erreur sur le site', $errno);
    mail('admin@example.com', 'Erreur sur le site', $errfile);
    mail('admin@example.com', 'Erreur sur le site', $errline);
}

// Enregistrer la fonction comme gestionnaire d'erreur
set_error_handler('errorHandler');

// Définir une fonction pour gérer les erreurs fatales
function shutdownHandler() {
    $error = error_get_last();
    if ($error !== null) {
        // Envoyer un email avec les détails de l'erreur
        mail('admin@example.com', 'Erreur fatale sur le site', $error['message']);
    }
}

// Enregistrer la fonction comme gestionnaire d'erreur fatale
register_shutdown_function('shutdownHandler');
?>
[/code]

J'ai essayé en l'appelant par un include dans le header. J'ai essayé en l'appelant directement dans mon fichier funtion.php

[code=php]
<?PHP include 'function-copierBalises.php';?>
<?PHP include 'function-BaliseAsset.php';?>
<?PHP include 'function-RedondanceCopierBalises.php';?>
<?PHP include 'function-Materiel.php';?>
<?PHP include 'function-Logiciel.php';?>
<?PHP include 'function-AutreMateriel.php';?>
<?PHP include 'function-LogicielAcces.php';?>
<?PHP include 'function-SupportTelephonie.php';?>
<?PHP include 'function-Cmdb.php';?>
<?PHP include 'function-nonAdc.php';?>
<?PHP include 'function-Transfert.php';?>
<?PHP include 'function-copierGenerale.php';?>
<?PHP include 'function-FinChaine.php';?>
<?PHP include 'function-connexion.php';?>
<?PHP include 'function-demandeAll.php';?>
<?PHP include 'function-listeType.php';?>
<?PHP include 'function-pmad-listeType.php';?>
<?PHP include 'error.php';?>
[/code]

Si je renomme une page et que je l'appelle j'ai bien l'erreur 404 qui s'affiche sur le site. Mais cela n'envoie pas de mail.

Merci pour votre patience.

Réponse

Bonjour, comme expliqué sur le site de PHP la fonction set_error_handler ne peut pas être utilisée pour gérer bons nombres de constantes d'erreur.

Certes elle peut être utile dans certains cas mais pas dans tous. Pour des erreurs du type 404, 403 et 500 vous pourriez plutôt utiliser une redirection HTACCESS vers des fichiers spécifiques du type 404.php, 403.php et 500.php.

Ainsi vous pouvez utiliser la directive Apache ErrorDocument pour spécifier le chemin vers un fichier personnalisée, 404.php par exemple.

ErrorDocument 404 /404.php

Dans ce fichier pour pourriez alors utiliser $_SERVER['HTTP_REFERER'] pour capturer l'URL de la page qui n'existe pas et qui retourne l'erreur 404, puis ensuite envoyer votre mail.