Version complète: sur le forum Webmaster Hub : mail() : cacher le message d'erreur
Webmaster Hub > Création et exploitation de Sites Internet > Les langages du Net > PHP
Jan
Bonjour,
J'utilise la fonction mail() PHP pour permettre à mes visiteurs de m'envoyer un message depuis mon site:
CODE
if (mail("moi_AT_mondomaine.com",$_POST["titre"],$_POST["message"],$entete)){ // mail envoyé
  echo "Message envoyé.";
}
else { // erreur lors de l'envoi du mail
  echo "Une erreur s'est produite.";
}

Tout marche bien à un petit détail prêt: quand une erreur se produit sur le serveur au moment de l'envoi du mail (condition else), le message d'erreur venant du serveur s'affiche avant mon message d'erreur perso "Une erreur s'est produite."

Est-il possible de ne pas afficher ce message d'erreur venant du serveur?

Merci.
AvenueDuWeb
Normalement en php, si tu mets "@" devant les fonctions il ne renvoie pas les erreurs, mais comme je n'utilise jamais ce subterfuge, je ne l'ai jamais essayé, donc je ne suis pas sûr à 100% mais essaye en mettant "@mail(..." ! @+
Jan
Ca marche. Merci wink.gif
Anonymus
Le @ marche très bien en production, pour quantité de fonctions. Elle empèche l'affichage des erreurs, et permet effectivement de personnaliser les erreurs.

Mais tu peux aussi t'en servir pour les fonctions d'accès à la base de données, notamment. (@mysql_query, _AT_mysql_fetch_array, ...)
xpatval
Bonjour,

A ce propos, existe-t-il une possibilité de récupérer les erreurs serveurs lors d'un envoi mail (les warning: ...), afin de les traiter ?

xpatval
Anonymus
Oui, dans la même optique que la fonction ci-dessus (@mail), tu peux imaginer un système comme ceci :

if (! _AT_mail($to,$sujet,$body))
stock_erreur_mail();

L'arobase permet de ne pas afficher l'erreur, mais cela n'empeche pas la fonction de retourner FALSE wink.gif
Donc tu la met dans un 'if', et tu lances une fonction si le mail ne part pas.
Jan
Anonymus,
Je n'ai pas compris: mail() renvoie bien FALSE, mais dans quelle variable ou par quelle fonction peut-on récupérer le contenu de l'erreur renvoyée par le serveur?
Titag
CITATION(Jan @ jeudi 09 septembre 2004, 09:45)
par quelle fonction peut-on récupérer le contenu de l'erreur renvoyée par le serveur?

Il y a deux cas possibles pour moi :

1 - Tu as une erreur de syntaxe dans ton code et dans ce cas là le serveur qui execute php mentionne l'erreur (genre tu as oublié un paramètre de la fonction)
2 - Ton code est correct mais, par exemple, le destinataire n'existe pas, et dans ce cas là un message d'erreur est envoyé à l'adresse mail que tu as mentionné dans l'entete du message (From: <toto_AT_ndd.com> ou Return-path)

Ceci dit peut-être existe-t-il des moyen de récupérer tout ca...
Anonymus
Jan :

$php_errormsg est la variable qui contient la dernière erreur php.
Pour y avoir accès, il faut que la 'directive de configuration ' track_errors soit activé. Or cette directive est 'normalement' désactivée par défaut.

Donc :
1/ on active cette directive, (via ini_set)
2/ on désactive le message d'erreur de la fonction (avec préfixe @ )
3/ on récupère le message d'erreur (via la variable $php_errormsg)

Ca donne :

CODE
ini_set("track_errors",1);
if (! _AT_mail(' Le Hub, il est  top !! '))
    echo "<br><b>Erreurs générées :</b><br>-->".$php_errormsg."<br><b>Fin des erreurs</b><p> ";


Ce qui donne :
CITATION
Erreurs générées :
-->mail() expects at least 3 parameters, 1 given
Fin des erreurs

Voilà. L'idéal étant de placer tout ceci dans un journal d'erreurs, évidement.

Anonymus.
Jan
C'est clair, merci wink.gif
xpatval
Et bien merci, ça à le mérite de fonctionner....

xpatval
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'information, la mise en page et les images, veuillez cliquer ici.