Bonjour,

Tous mes vœux de Bonheur Santé Amour Réussite pour 2023.
J'aimerai savoir s'il est possible d'envoyer un mail lorsque le site affiche une erreur.
J'ai trouvé ce fichier sur internet qui affiche bien l'erreur, mais seulement sur le site.
J'aimerai qu'un message type s'affiche et que cela envoi le vrai message d'erreur à une boite mail.
Voici le fichier d'erreur.

// Affichage des erreurs
<?PHP
$type_gestion = 1; // 1=>mode debug, 2=>mode production (erreur dans log/error.log), 0=>Aucun traitement
switch ($type_gestion) {
    case '1':
        if (PHP_VERSION_ID < 50400) error_reporting (E_ALL | E_STRICT);
        else error_reporting (E_ALL);
	ini_set('display_errors', true);
	ini_set('html_errors', false);
	ini_set('display_startup_errors',true);		  
        ini_set('log_errors', false);
	ini_set('error_prepend_string','<span style="color: red;">');
	ini_set('error_append_string','<br /></span>');
	ini_set('ignore_repeated_errors', true);
    break;
    case '2': 
        error_reporting (E_ALL);
	ini_set('display_errors', false);
	ini_set('html_errors', false);
	ini_set('display_startup_errors',false);
	ini_set('log_errors', true);
	ini_set('error_log', CHG_ROOT_PATH.'log/error.log');
	ini_set('error_prepend_string','<span style="color: red;">');
	ini_set('error_append_string','</span>');
	ini_set('ignore_repeated_errors', true);
    break;
    default:
	error_reporting (E_ALL);
	ini_set('display_errors', false);
	ini_set('html_errors', false);
	ini_set('display_startup_errors',false);
	ini_set('log_errors', false);
}
?>

Je ne sais par où commencer.
Vous en remerciant par avance.
Modérateur
Salut,

Pour qu'il y ai une erreur, il faut que le site soit affiché. S'il est pas lancé, il n'y a pas d'erreur. Donc dans l'idée j'imagine qu'il faudrait créer un script qui irait vérifier toutes les X min (ou heures ou secondes) l'url du site voir s'il y a une erreur et si oui t'envoyer un mail.

Sinon tu peux faire en sorte que ca envoie un email au moment ou l'erreur s'affiche quand un utilisateur la voit mais ca sera déjà trop tard quoi. Dans ce cas là, à la fin de tout les tests il faut faire un if erreurs (c'est error_reporting qui récupère toutes les erreurs ?) alors on envoie un email.
Salut,

c'est un script qui permet de configurer ton php pour afficher directement les erreurs quand tu es en train de faire du développement (en local sur ton pc) mais une fois en production (donc accessible par internet), tu dois modifier la valeur pour avoir $type_gestion = 2; et avoir les logs dans un fichier de log. Il ne faut pas afficher les erreurs à tes utilisateurs.
Bonjour _laurent, Mathieuu,

En fait le site est sur un serveur IIS, et parfois il affiche une erreur 500.
Donc quand cette erreur s'affiche je dois faire en sorte que cela m'envoie un mail avec le message d'erreur PHP, et je dois afficher une alerte indiquant l'user que nous sommes avertit par mail, patata patati..

Je pense que je vais suivre la solution de Mathieuu.

Merci beaucoup à vous deux.
Modérateur
wisefun77 a écrit :
Je pense que je vais suivre la solution de Mathieuu.

Ne pas afficher les erreurs 500 à tes utilisateurs ?! Smiley lol
Bonjour _laurent,
a écrit :

Ne pas afficher les erreurs 500 à tes utilisateurs ?! Smiley lol


Oui j'en suis conscient. Pour le moment ils ne voient que Erreur 500. Mais moi je veux savoir ce qui ce cache derrière cette erreur. Smiley lol

Merci.
Bonjour,

Maintenant que le code fonctionne bien sur le serveur IIS en local sur mon pc.
Malheureusement il ne fonctionne pas du tout sur le serveur IIS du client.
Dès que je clique sur le premier bouton dirigeant vers une page cela indique l'erreur 500.

Avez-vous une solution?

Merci.
wisefun77 a écrit :
Bonjour,

Tous mes vœux de Bonheur Santé Amour Réussite pour 2023.
J'aimerai savoir s'il est possible d'envoyer un mail lorsque le site affiche une erreur.


Oui, c'est possible d'envoyer un mail lorsque le site affiche une erreur en utilisant les gestionnaires d'erreurs de PHP. Vous pouvez utiliser les fonctions set_error_handler() et register_shutdown_function() pour définir des gestionnaires d'erreurs personnalisés qui envoient un mail lorsqu'une erreur se produit.

Voici un exemple de code qui envoie un email lorsqu'une erreur se produit :

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

// 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');
Bonjour JENCAL,

J'ai modifié le code dans un fichier appelé error.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');
?>


J'ai essayé en l'appelant par un include dans le header.
J'ai essayé en l'appelant directement dans mon fichier funtion.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';?>

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 ta patience.
Modifié par wisefun77 (25 Jan 2023 - 11:46)
Pour les pages 404 c'est différents. c'est pas une "erreur" php.

Il existe plusieurs manières d'envoyer un e-mail lorsqu'une erreur 404 se produit sur ton site

Dans le fichier .htaccess de ton site, ajoute une règle pour rediriger toutes les erreurs 404 vers une page de gestion des erreurs personnalisée:
ErrorDocument 404 /errors/404.php

Créez un fichier 404.php dans le répertoire /errors/ avec le code suivant:

<?php

// Récupération des informations sur l'erreur
$errorUrl = $_SERVER['REQUEST_URI'];
$userAgent = $_SERVER['HTTP_USER_AGENT'];
$remoteAddr = $_SERVER['REMOTE_ADDR'];

// Préparation du corps du message d'erreur
$message = "Une erreur 404 s'est produite sur votre site:\n\n";
$message .= "URL: $errorUrl\n";
$message .= "User-Agent: $userAgent\n";
$message .= "IP: $remoteAddr\n";

// Envoi de l'e-mail à l'administrateur
$headers = 'From: no-reply@monsite.com' . "\r\n" .
    'Reply-To: no-reply@monsite.com' . "\r\n" .
    'X-Mailer: PHP/' . phpversion();

mail('admin@monsite.com', 'Erreur 404 sur votre site', $message, $headers);

// Affichage de la page d'erreur 404
header("HTTP/1.0 404 Not Found");
echo "Erreur 404 - Page non trouvée";

?>
Bonjour JENCAL,

Il n'y a pas de fichier .htaccess sur le serveur IIS du client, et je n'aurai pas les droits d'accès.
J'ai test sur le gestionnaires de serveur IIS, en modifiant le chement du fichier 404.htm.
Cela affiche bien ce que je veux sur la page, mais n'envoie pas de mail depuis outlook.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//FR" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
    <meta charset="UTF-8">
   
<title>404 - Fichier ou répertoire introuvable.</title>
<style type="text/css">
<!--
body{margin:0;font-size:.7em;font-family:Verdana, Arial, Helvetica, sans-serif;background:#EEEEEE;}
fieldset{padding:0 15px 10px 15px;} 
h1{font-size:2.4em;margin:0;color:#FFF;}
h2{font-size:1.7em;margin:0;color:#CC0000;} 
h3{font-size:1.2em;margin:10px 0 0 0;color:#000000;} 
#header{width:96%;margin:0 0 0 0;padding:6px 2% 6px 2%;font-family:"trebuchet MS", Verdana, sans-serif;color:#FFF;
background-color:#555555;}
#content{margin:0 0 0 2%;position:relative;}
.content-container{background:#FFF;width:96%;margin-top:8px;padding:10px;position:relative;}
-->
</style>
</head>
<body>
<div id="header">
    <h1>- Server Error 404 - 
        <br/>
        - Fichier ou répertoire introuvable -
        <br/>
        - Un mail a été généré automatiquement vers notre service.
        <br/>
        - Nous sommes désolés pour la gêne occasionnée.
        <br/>
    </h1>
</div>
<div id="content">
 <div class="content-container"><fieldset>
    Une erreur 404 s'est produite sur le site.
    <br/>
    
    <br/>
    
<?php

// Récupération des informations sur l'erreur
$errorUrl = $_SERVER['REQUEST_URI'];
$userAgent = $_SERVER['HTTP_USER_AGENT'];
$remoteAddr = $_SERVER['REMOTE_ADDR'];

// Préparation du corps du message d'erreur
$message = "Une erreur 404 s'est produite sur votre site:\n\n";
$message .= "URL: $errorUrl\n";
$message .= "User-Agent: $userAgent\n";
$message .= "IP: $remoteAddr\n";

// Envoi de l'e-mail à l'administrateur
$headers = 'From: no-reply@monsite.com' . "\r\n" .
    'Reply-To: no-reply@monsite.com' . "\r\n" .
    'X-Mailer: PHP/' . phpversion();

mail('admin@monsite.com', 'Erreur 404 sur votre site', $message, $headers);

// Affichage de la page d'erreur 404
header("HTTP/1.0 404 Not Found");
echo "Erreur 404 - Page non trouvée";

?>
 </fieldset></div>
</div>
</body>
</html>


Merci pour ta patience.
Ton fichier s'appelle 404.htm ?
il faut utiliser l'extension de fichier .php pour que le php soit lu.

Je te conseil de reprendre les bases de la programmation en php. pour que soit plus clair pour toi.
JENCAL a écrit :
Ton fichier s'appelle 404.htm ?
il faut utiliser l'extension de fichier .php pour que le php soit lu.

Je te conseil de reprendre les bases de la programmation en php. pour que soit plus clair pour toi.


Entièrement d'accord avec toi, j'avais essayé mais le site mets trop de temps à charger la page d'index et les autres pages.

En fait je vais rester sur ton conseil de mettre le fichier dans un dossier et je vais ajouter un bouton pour que l'user envoie un mail avec la capture d'écran.

Cela sera plus pratique pour eux.

Merci de ta patience.