Comment faire une boucle qui dors et se reveille apres 1h

Eléphant du PHP | 331 Messages

07 mai 2010, 16:33

Bonjour,

jai un script qui envoie une newsletter a mes membres a date fixe via une commande cron

mon hebergeur limite lenvoie de mail a 300/heure et 1500/jour

Alors, je cherche a se que ma boucle sexecute sur les 300 premier ... qu elle suspende son action et continue 1h plus tard ... resuspende pour 1h ... continue

Comment puis-je faire ca

merci

voici ma boucle actuel
<?
$date = date("Y-m-d");
include("/home/lagrande/public_html/config.php");
include("/home/lagrande/public_html/fonctions.php");

//-------------------------------------------------
$connect=mysql_connect($host,$login,$password) or die("Impossible d'&eacutetablir la connexion");
$result=mysql_select_db($db) or die("Impossible d'ouvrir la base de donn&eacute;es");
//SÉLECTIONNER LE PREMIER ENREGISTREMENT DE CITATION
$sqlA="select * from citations order by id ASC LIMIT 1";
$queryA=mysql_query($sqlA) or die("Erreur sqlA");

if($row=mysql_fetch_array($queryA))
{


//INSÉRER L'ENREGISTREMENT DANS LA TABLE D'ARCHIVE
	$sqlB="INSERT INTO citations_archives VALUES('','".addslashes($row['nom'])."','".addslashes($row['description'])."','".addslashes($row['auteur'])."','$date')" or die("Table introuvable");
	$queryB=mysql_query($sqlB) or die("Could not execute mysql query!");
	$nb=mysql_insert_id();
//SUPPRIMER LE PREMIER ENREGISTREMENT DE CITATION

affiche_adresse();
		$sqlC="delete from citations where id=\"".$row["id"]."\"";
		$queryC=mysql_query($sqlC) or die("Impossible d'exécuter la requête");

//ENVOYER LA CITATION AUX ABONNÉS EMAIL
			$sqlD = "select * from email order by id ASC";
			$queryD=mysql_query($sqlD) or die("Erreur sqlD");

 //Jeremy Cardon, 2005
 //Si vous utilisez ce code, un petit lien vers http://www.attractionland.com dans votre rubrique liens est toujours apprécié
 //

 function email($destinataire, $sujet , $messtxt, $messhtml,$mailfrom="[email protected]",$namefrom="lagrandeloi.com")
 {
 $boundary = "_".md5 (uniqid (rand()));
 $entete = "MIME-Version: 1.0\n";

 $entete .= "X-Sender: <www.lagrandeloi.com>\n";
 $entete .= "X-Mailer: PHP\n";
 $entete .= "X-auth-smtp-user: [email protected] \n";
 $entete .= "X-abuse-contact: [email protected] \n";

 $entete .= "Reply-to: $namefrom <$mailfrom>\n";
 $entete .= "From:$namefrom <[email protected]>\n";

 $entete .= "Content-Type: multipart/alternative; boundary=\"$boundary\"";

 $message = "--" . $boundary . "\n";
 $message.= "This is a multi-part message in MIME format.\n\n";

 $message .= "Content-Type: text/plain; charset=\"iso-8859-1\"\n";
 $message .= "Content-Transfer-Encoding: quoted-printable\n\n";
 $message .= $messtxt;
 $message .= "\n\n";
 $message .= "--" . $boundary . "\n";
 $message .= "Content-Type: text/html; charset=\"iso-8859-1\"\n";
 $message .= "Content-Transfer-Encoding: quoted-printable\n\n";
 $message .= str_replace("=","=3D",$messhtml);
 $message .= "\n\n";


 return @mail($destinataire, $sujet, $message, $entete);
 }
			while($row2=mysql_fetch_array($queryD))
			{

			//$head= "MIME-Version: 1.0\r\n";
			//$head.= "Content-type: text/plain; charset=iso-8859-1\r\n";
			//$head.= "From: $email <$email>\r\nReply-to : $email <$email>\nX-Mailer:PHP";	
			$sujet="www.lagrandeloi.com (citation no. ".$nb.")";			
			$mailbody="".stripslashes($row['description'])."<br><br>\n\n";
			$mailbody.="".stripslashes($row['auteur'])."\n\n";
			//$mailbody.="Pour vous d&eacute;sabonner <A HREF=\"http://www.lagrandeloi.com/desabonnement.php\">cliquer ici</A><br></br>\n";

		



 email($row2["courriel"],$sujet,$mailbody,$mailbody,$email,"Alain Coutu"); 	


		
		
		//	$result=mail($row2["courriel"],$sujet,$mailbody,$head ) or die("Erreur MAIL1");
			}

}
?>

ViPHP
AB
ViPHP | 5818 Messages

07 mai 2010, 17:12

Utilises un cron . Tu trouveras plus d'info en rentrant ce mot dans le moteur de recherche, celui du site ou googgle.

En fait ça revient à programmer ton script pour qu'il s'exécute toutes les heures.

Eléphant du PHP | 331 Messages

07 mai 2010, 17:19

je crois que tu m as mal compris

jutilise deja un cron

mon probleme est la limite de 300 email par heure

je veux que les 300 premier soient envoyer et l heure suivante les 300 autres

ViPHP
AB
ViPHP | 5818 Messages

07 mai 2010, 17:34

Et bien qu'est-ce qui t'empêche d'enregistrer un marqueur qui indique où tu en est dans l'envoie de tes enregistrements et de construire ta requête en fonction de ce marqueur ?

Eléphant du PHP | 331 Messages

07 mai 2010, 17:52

bon cest ce genre de suggestion que j esperais recevoir ...

cest que je ne sais pas comment faire sa un marqueur et construire ma requete en fonction du marqueur

ViPHP
AB
ViPHP | 5818 Messages

07 mai 2010, 18:19

Sur le principe, un truc dans le genre :
// Recherche $marqueur en bdd ou dans un fichier texte.

//Au début $marqueur = 0
if (isset($marqueur))
{
    $req = "SELECT * FROM mails LIMIT '".$marqueur."', 300";

    if($query = mysql_query($req))

    {
        $num_rows = mysql_num_rows($query);
        if ($num_rows > 0)
            {
                //envoi des mails

                $marqueur += 300;
           }
 
    }
}
$marqueur tu l'enregistre dans un champ de bdd ou dans un ficher texte...
Modifié en dernier par AB le 07 mai 2010, 18:43, modifié 1 fois.

ViPHP
AB
ViPHP | 5818 Messages

07 mai 2010, 18:29

Sinon tu pourrais avoir aussi un champ "etat_mail" (= 0 ou = 1) dans un champs de ta bdd, et tu change l'état de ce champ quand tu envoie le mail.

La requête serait du type "SELECT * FROM mails WHERE etat_mail = 0 LIMIT 300";

Mais ça t'oblige a faire un update du champ "etat_mail" = 1 sur les trois cents lignes envoyées. ça demande donc plus de ressources que la solutions précédente.
Cela dit en utilisant les requêtes préparées qui seraient tout à fait intéressantes et justifiées dans ce cas, un update sur trois cent lignes devraient se faire très très rapidement.

Mammouth du PHP | 985 Messages

07 mai 2010, 19:57

Bonjour,

jai un script qui envoie une newsletter a mes membres a date fixe via une commande cron

mon hebergeur limite lenvoie de mail a 300/heure et 1500/jour

Alors, je cherche a se que ma boucle sexecute sur les 300 premier ... qu elle suspende son action et continue 1h plus tard ... resuspende pour 1h ... continue

Comment puis-je faire ca?
Ah c'est toi qui spam nos boites mails :-k
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.

Eléphant du PHP | 331 Messages

07 mai 2010, 20:24

Bonjour,

jai un script qui envoie une newsletter a mes membres a date fixe via une commande cron

mon hebergeur limite lenvoie de mail a 300/heure et 1500/jour

Alors, je cherche a se que ma boucle sexecute sur les 300 premier ... qu elle suspende son action et continue 1h plus tard ... resuspende pour 1h ... continue

Comment puis-je faire ca?
Ah c'est toi qui spam nos boites mails :-k

lol non cest pas moi, moi se que jenvoie des des pense positive aux membre du site. exe,ple voici celle qui partira lundi:
L'ancêtre de toute action est la pensée.

Ralph Waldo Emerson

ViPHP
AB
ViPHP | 5818 Messages

07 mai 2010, 21:17

lol non cest pas moi, moi se que jenvoie des des pense positive aux membre du site. exe,ple voici celle qui partira lundi:
L'ancêtre de toute action est la pensée.

Ralph Waldo Emerson
Si seulement c'était vrai :)
ça peut être aussi des souvenirs, sur lesquels la pensée n'exerce pas toujours de regard critique. Et dans ce cas, on parle alors d'à priori, ou l'on observe des comportements inadaptés etc.

Enfin bon, au fait, tu trouve une des mes deux solutions précédentes envisageables pour ton problème ?

Eléphant du PHP | 331 Messages

07 mai 2010, 21:34

je vais les essayer a mon retour du week end

merci

Eléphant du PHP | 428 Messages

08 mai 2010, 14:25

As-tu essayer d'injecter des balises <redbull></redbull> ?

OK, je sors =>[ ]