Faire des "pauses" dans un script php

Consultez la formation à Google Analytics de WebRankInfo / Ranking Metrics

Zim'
WRInaute impliqué
WRInaute impliqué
 
Messages: 804
Inscription: 27 Avr 2006

Faire des "pauses" dans un script php

Message le Sam Juin 24, 2006 16:02

Salut tout le monde,

Je sais qu'on en avais parlé sur le chat un soir, mais je sais plus du tout

Je suis en php4, et je voudrais faire un truc qui envoie un mail.

Pour le moment, j'aimerai que ça gere au moins l'envoie de 2500 mails à la suite max.

Vous pensez quoi? Si je boucle à la barbare sur les mails, ça passe?

Sinon, et par sécurité, j'aimerai bien les envoyer par lot de 250/500 sans qu'il y ai besoin d'intervention ni rien, donc faire des pause durant l'execution du script php?

Ensuite, si vous pouvez m'indiquer la méthode pour allonger le timeout d'un script php, ce serais cool.

Donc voila, merci d'avance pour ceux qui saurons m'aider :)

PS: autre question,

Si dans un script j'update ma bdd à unchamp=1, que je fais des opération, et que apres je fais un update a unchamp=1 (a chaque fois sur tous les enregistrements), entre les deux requetes SQL, j'ai bien les bonnes valeur dans ma bdd? (je suppose que oui mais bon)


e-kiwi
Modérateur
Modérateur
 
Messages: 15617
Inscription: 23 Déc 2003

Message le Sam Juin 24, 2006 16:04

http://fr.php.net/sleep ?

moi je boucle à la barbare sur 2500 mails, ca passe sans problème :) mais je sais pas sur quel serveur tu es. mutualisé ?


Leonick
WRInaute accro
WRInaute accro
 
Messages: 19592
Inscription: 8 Aoû 2004

Re: Faire des "pauses" dans un script php

Message le Sam Juin 24, 2006 19:56

Zim' a écrit:Ensuite, si vous pouvez m'indiquer la méthode pour allonger le timeout d'un script php, ce serais cool.

Code: Tout sélectionner
set_time_limit(60000); //fixe un delai maximum d'execution de 600 secondes soit 10 minutes.
:wink:

thierry8
WRInaute accro
WRInaute accro
 
Messages: 3251
Inscription: 11 Juil 2005

Message le Sam Juin 24, 2006 21:20

Tu as un dédié ?

si c'est le cas un petit cron qui lance un script php, qui lui même fait:

- récupération de toute la liste de mail + info perso.
- une boucle qui traite message par message
- dans la boucle pour chaque mail: un set_time_limit(20);
(20 seconde pour traiter chaque mail..largement suffisant)
- tous les 100 mails traités une pause d'une minute par exemple (sleep(60);)
- ne pas oublier devant le sleep(60) un set_time_limit(80);

Ainsi 3000 mails seront traité en 30 minutes (~) sans surcharge serveur.

Après tu peu adapter le tout (temps d'attente,nombre de mail envoyé par packet, etc..)


ysimon
WRInaute discret
WRInaute discret
 
Messages: 153
Inscription: 24 Fév 2004

Message le Sam Juin 24, 2006 21:58

thierry8 a écrit:Tu as un dédié ?


euh, sur un dédié chez ovh, je crachais 120 000 mails à l'heure
y'a pas de soucis, pourquoi faire une pause pour 2000 mails .. tu balances le tout ... avec un long script php, mais en local (tu mets un smtp local, genre postfix) ... et apres, c'est postfixqui mettra du tempsà tout envoyer

chris2000
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 5
Inscription: 13 Nov 2009

Re: Faire des "pauses" dans un script php

Message le Mar Déc 08, 2009 9:46

bonjour, j'ai le meme probleme

j'apelle à partir d'une boucle des mails d'une base de donnée, que j'envoie, seulement j'ai un fichier de pres de 7000 mails,
j'ai serveur smtp privé,

j'ai ce code

Code: Tout sélectionner
for ($i=1;$i<$nb;$i++){
  $o=mysql_fetch_object($result_mail);
   $recipient=$o->news_mail;

    if (isset($_POST['select'.$i.''] )){   //si la checkbox du mail est selectionnée             
           $mail =& Mail::factory("smtp", $smtp_params);
           $result = $mail->send($recipient, $headers, $body);  //envoi du mail
    }
}


donc di j'ai bien compris la reponse de thierry8

il faudrait que je rajoute:

Code: Tout sélectionner
for ($i=1;$i<$nb;$i++){
    $o=mysql_fetch_object($result_mail);
    $recipient=$o->news_mail;
      
       if (isset($_POST['select'.$i.''] )){   //si la checkbox du mail est selectionnée       
          $mail =& Mail::factory("smtp", $smtp_params);
         $result = $mail->send($recipient, $headers, $body);  //envoi du mail
         set_time_limit(20);
       }
}


je ne suis pas tres exellent en requete sql, comment faire pour envoyer tous les 100 mails traités une pause d'une minute ???

merci d'avance pour votre aide

sky
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 260
Inscription: 3 Mar 2003

Re: Faire des "pauses" dans un script php

Message le Jeu Déc 10, 2009 8:32

Bonjour
Voici un exemple de comment on pourrais faire une pause tous les 100 mails envoyés.

Code: Tout sélectionner
// on cree et affiche le site
$Tpl->createTemplate();
$nbr_mail_pause = 100; // on fais une pase après 100 mails
$i = 0; // $i sera le compteur

for ($i=1;$i<$nb;$i++)
{
    $o = mysql_fetch_object($result_mail);
    $recipient=$o->news_mail;

    if (isset($_POST['select'.$i.''] ))
    {
        $mail =& Mail::factory("smtp", $smtp_params);
        $result = $mail->send($recipient, $headers, $body);  //envoi du mail

        $i++;
        if($i == $nbr_mail_pause)
        {
            // si $i = 100, on reinitialise $i à 0 et on fais la pause
            $i = 0;
            set_time_limit(20);
        }
    }
}


Sky


Leonick
WRInaute accro
WRInaute accro
 
Messages: 19592
Inscription: 8 Aoû 2004

Re: Faire des "pauses" dans un script php

Message le Jeu Déc 10, 2009 10:45

simplifie ton test pour les 100 pages en utilisant la fonction modulo if ($i % $nbr_mail_pause==0)

sky
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 260
Inscription: 3 Mar 2003

Re: Faire des "pauses" dans un script php

Message le Jeu Déc 10, 2009 11:23

Oui, mais c'est plus dure à comprendre.
Ca fonctionne comme ceci et c'est plus facile à lire :)

Si cette personne ne comprend pas comment insérer une pause tous les 100 itérations, je pense qu'on doit mettre un code le plus explicite possible pour que cette personne puisse comprendre la logique avant de commencer à optimiser ou raccourcir le code qui est en général une étape secondaire.

Sinon, explication sur le comment du pourquoi du modulo en PHP : http://php.net/manual/fr/language.operators.arithmetic.php

Sky


Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Formation recommandée sur ce thème :

Formation Google Analytics : en 2 jours, apprenez comment exploiter l'essentiel des possibilités de l'outil de mesure d'audience de Google. Formation animée par les experts Google Analytics de Ranking Metrics.

Tous les détails sur le site Ranking Metrics : programme, prix, dates et lieux, inscription en ligne.

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités