mailing tempo.....erreur!

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : mailing tempo.....erreur!

par mario » 24 mars 2006, 17:36

essaye comme ça... abandonne la boucle for.
mon exemple te donne un peu le principe, je ne l'ai pas testé, sans garantie... mais le principe de fonctionnement devrait être celui que tu souhaites
<?php
$expediteur = '[email protected]'; // Adresse de l'expéditeur
$sql = "SELECT mail FROM matable";  // jamais de SELECT *
$result = mysql_query($sql) or die(mysql_error()); // exécution de la req
$pause = 3; // nbr de seconde pour la pause 
$nbr= mysql_num_rows($result); // nombre de ligne resultant de la req

$i = 0; // initialise la variable pour le compteur de mail
$tmp = ''; // initialise la variable pour stocker les emails

if ($nbr !== 0){ // Si il y a au moins 1 résultat suite à la req
   while($row=mysql_fetch_assoc($result)){ // Lis les lignes 1 à 1
      $tmp.= $row['mail']; // Stocke l'adresse e-mail dans un tampon
      $i++; // ajoute 1 à la variable $i
      if ( ($i != $nbr) AND ($i % 100 !== 0) ) $tmp.= ',';  // si ns ne sommes pas à la fin de la liste d'email, ajoute une ,
      if ( $i % 100 === 0 ){ // si on est à la 100ème, on envoi le mail
         mail('[email protected]', 'sujet', 'texte',"From: ".$expediteur."\n\rBCC:".$tmp."\n\r");
         $tmp = ''; // on vide le tampon contenant les emails
         sleep($pause); // on attends X secondes
      }
   }
}
?>
Si vous voyez des erreurs, je suis toutoui :wink:

par Ryle » 24 mars 2006, 16:12

Dans ce cas là tu peux juste te contenter du while à priori... à tester :)
$i = 1; // compteur
while($ligne=mysql_fetch_row($result)){ 
  echo $ligne[0]; 
  if ($i % 100 === 0) { // tous les 100 messages
    echo 'Attente de '.$attente.' seconde(s)<br/>'; 
    sleep($attente); // pause de x seocndes 
  }
  $i++; // incrémentation du compteur 
} 
Je démarre le compteur à 1 pour éviter les 3 secondes de pauses au premier passage si l'on démarrait à 0 :)

par kenken38 » 24 mars 2006, 16:03

Mais j'ai pas l'impression qu'il fait ce que je lui demande....

En fait il faut que j'écrive 100fois $ligne[0] puis une pause de 3s puis re $ligne[0] et repause...jusqu'a qu'il n'y ai plus d'enregistrement dans la table.
Merci de votre aide!

par Ryle » 24 mars 2006, 16:01

héhé :)

bah si ca peut te rassurer, j'étais parti dans ce sens là également, et puis j'ai voulu vérifier s'il ne faisait pas 50 pauses de 3 secondes en fait et chuis tombé sur ce $i qui trainait ;)

Re: mailing tempo.....erreur!

par [BQS]Jayce » 24 mars 2006, 15:53

oups j'ai regarder l'erreur mais pas le code...

grosse bourde lol...

;)

Re: mailing tempo.....erreur!

par Ryle » 24 mars 2006, 15:51

Voila l'erreur:
Maximum execution time of 30 seconds exceeded
Le problème vient du fait que ton script met plus de 30 secondes à s'exécuter et le serveur génère du coup un timeout (la durée d'exécution d'un script avant timeout étant paramétrable dans le php.ini ou le httpd.conf, je sais jamais lequel des deux)

En fait ta boucle for est une boucle infinie, dans la mesure où à la fin tu remet toujours la variable $i à 1, elle ne s'incrémente donc jamais correctement et n'arrivera jamais à 50 ;)
for ($i = 1; $i < 50; $i++){ 
  while($ligne=mysql_fetch_row($result)){ 
    echo $ligne[0]; 
  } 
  if ($i % 10 === 0) { // 
    echo 'Attente de '.$attente.' seconde(s)<br/>'; 
    sleep($attente); // pause de x seocndes 
  } 
  // Ligne à supprimer : si $i est passé à 2 avec le for, ca le remet à 1 :)
  // $i=1; 
}

Re: mailing tempo.....erreur!

par [BQS]Jayce » 24 mars 2006, 15:50

Bonjour,

Le but est que je puisse afficher(avant d'envoyer) la liste ds mails, par paquet de 100 avec une pause de 3 sec entre chaque paquet. Merci d'avance!

Voila l'erreur:
Maximum execution time of 30 seconds exceeded

Voila le code!

$sql = "SELECT * FROM `toto`";
$result = mysql_query($sql) or die("Erreur dans la requete");
$attente = 3; // nombre de secondes

for ($i = 1; $i < 50; $i++){
while($ligne=mysql_fetch_row($result)){
echo $ligne[0];
}
if ($i % 10 === 0) { //
echo 'Attente de '.$attente.' seconde(s)<br/>';
sleep($attente); // pause de x seocndes
}
$i=1;
}
il suffit d'augmenter le temps d'execution de ce script uniquement

en mettant au depart de ton script

http://fr.php.net/manual/fr/function.set-time-limit.php

set_time_limit([valeur en int]);

0 = illimité assez dangereux si tu as une boucle dans ton script...

mailing tempo.....erreur!

par kenken38 » 24 mars 2006, 15:41

Bonjour,

Le but est que je puisse afficher(avant d'envoyer) la liste ds mails, par paquet de 100 avec une pause de 3 sec entre chaque paquet. Merci d'avance!

Voila l'erreur:
Maximum execution time of 30 seconds exceeded

Voila le code!

$sql = "SELECT * FROM `toto`";
$result = mysql_query($sql) or die("Erreur dans la requete");
$attente = 3; // nombre de secondes

for ($i = 1; $i < 50; $i++){
while($ligne=mysql_fetch_row($result)){
echo $ligne[0];
}
if ($i % 10 === 0) { //
echo 'Attente de '.$attente.' seconde(s)<br/>';
sleep($attente); // pause de x seocndes
}
$i=1;
}