PHP : Fonction mail() bloque ma page

PHP : Fonction mail() bloque ma page - PHP - Programmation

Marsh Posté le 12-10-2006 à 11:09:39    

J'utilise pour mon Intranet la fonction toute simple mail() qui fonctionne très bien sauf quelle met énormément de temps à envoyer le mail.
 
En effet quand je clic sur envoi la page charge longtemps et je suis généralement obligé de l'arrêter sauvagement, par contre le message est bien envoyé.
 
Je voudrais savoir comment éviter se problème avec peut un while
 
D'avance merci.


---------------
Le problème avec les idées derrière la tête c'est qu'on ne peut pas les voir :??:
Reply

Marsh Posté le 12-10-2006 à 11:09:39   

Reply

Marsh Posté le 12-10-2006 à 11:13:20    

Un while ? [:johneh] [:johneh]
 
Profile une fois ton appli histoire de voir

Reply

Marsh Posté le 12-10-2006 à 11:16:43    

Mon code :
 

Code :
  1. $sql0="SELECT mel FROM personnel WHERE num_pers IN $pers and externe=1";
  2.   //echo "<br>$sql0";
  3.   $res0 = mysql_query($sql0);
  4.   while ($row0 = mysql_fetch_object($res0)) {
  5.     Mail($row0->mel,$obj,$mess);
  6.     echo "<br>Mail(".$row0->mel.",$obj,$mess)";
  7.   }


 
Il y a 90% des cas 1 seul mel envoyé même s'il y a une boucle


---------------
Le problème avec les idées derrière la tête c'est qu'on ne peut pas les voir :??:
Reply

Marsh Posté le 12-10-2006 à 11:19:31    

J'oubliais j'ai également un Net send qui est lancé en même temps avec le code suivant
 

Code :
  1. $res0=shell_exec("net send $p->ip $m" );


---------------
Le problème avec les idées derrière la tête c'est qu'on ne peut pas les voir :??:
Reply

Marsh Posté le 12-10-2006 à 11:22:29    

snike a écrit :

Mon code :
 

Code :
  1. $sql0="SELECT mel FROM personnel WHERE num_pers IN $pers and externe=1";
  2.   //echo "<br>$sql0";
  3.   $res0 = mysql_query($sql0);
  4.   while ($row0 = mysql_fetch_object($res0)) {
  5.     Mail($row0->mel,$obj,$mess);
  6.     echo "<br>Mail(".$row0->mel.",$obj,$mess)";
  7.   }


 
Il y a 90% des cas 1 seul mel envoyé même s'il y a une boucle


Selon la doc PHP, il est extrêmement déconseillé de faire un mail dans un boucle, parce qu'un socket est ouvert à chaque fois.
 
Je sais pas si tu sais, mais le premier paramètre peux prendre une liste d'email, y'a même pas besoin de faire de boucle :)
 
Genre :


$mail_array = array();
while ($row0 = mysql_fetch_object($res0)) {
  $mail_array [] = $row0->mel;
}
$mail_list = implode(',', $mail_array);
mail($mail_list, $obj, $mess);


Message édité par FlorentG le 12-10-2006 à 11:22:40
Reply

Marsh Posté le 12-10-2006 à 14:23:48    

Tout d'abord ecoute florentG c'est un bon conseil.
Puis perso je pense que le pb viens du net send que tu fais en meme tps.
 
J'ai deja bossé sur un site intranet qui faisait la meme chose.... et si tu essais d envoyer un netsend sur une ip qui n'existe pas (ou une machine non connectée), tu pars pour 30 seconde d'attente... c'est le delai max pour lequel netsend essai de joindre la machine.
 
 
A ca 2 solutions:  soit tu reduis ce temps d attente (mais de souvenir ce n'est possible que sur certaine versions de windows)
soit tu fais la lite des machines connectées sur ton reseau, et tu n'envoie le net send qu'a celle présente.
Pour ce faire, tu fais un shell_exec ( net view, ...); tu recuperes la variable de retour, tu en extraits les noms/ip des machines et ca roule ^^
 
Voilou


Message édité par bakastef le 12-10-2006 à 14:26:21
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed