Bonjour,
Désolé si je ne suis pas dans le bon forum, mais cela concerne aussi bien php que Mysql.
Mon pb est le suivant : j'ai un script qui va chercher dans ma db des adresses mails. Ensuite via le webservice de mon routeur de mail de masse, je récupère le statut du mail en question (spam, adresse inexistante, ...) et met à jour cette valeur dans ma db.
J'ai remarqué que pour environ 1500 adresses mails, le temps d'exécution était bien trop long pour si peux d'adresse et que dernièrement je suis même tombé en time out (erreur 504).
Voici mon script et dite moi comment l'optimiser.
D'avance merci pour vos retours
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47 //--- recherche des groupes de contacts ayant envoyé une campagne a J-1 $sql = 'SELECT newsletter.id_groupe, newsletter_groupe.libelle, newsletter_client.societe FROM newsletter LEFT JOIN newsletter_groupe ON newsletter_groupe.id_groupe = newsletter.id_groupe LEFT JOIN newsletter_client ON newsletter_client.id_client = newsletter.id_client WHERE TO_DAYS(NOW()) - TO_DAYS(newsletter.post_date) <= 1 GROUP BY newsletter.id_groupe' ; $query = mysql_query($sql) or die (mysql_error()); $nbgroupe = mysql_num_rows($query); if($nbgroupe >= 1) { //--- boucle sur les groupes retournés while ($groupe = mysql_fetch_assoc($query)) { $i = 0; //--- recherche des abonnés $sqlabo = 'SELECT newsletter_abonne.id_abonne, newsletter_abonne.cle, newsletter_abonne.mail, newsletter_abonne.etat FROM newsletter_abonne WHERE newsletter_abonne.id_groupe = ' . $groupe['id_groupe'] . ' ' ; $queryabo = mysql_query($sqlabo) or die (mysql_error()); //--- boucle sur les abonnées du groupe while ($abo = mysql_fetch_assoc($queryabo)) { $i++; $statut = Newsletter::MJStatutMailAbo($abo['mail']); if($statut['unsub'] == 1) { $etat = 2 ; } elseif($statut['bounce'] >= 1 && $statut['blocked'] == 0 && $statut['spam'] == 0 && $statut['unsub'] == 0) { $etat = 3 ; } elseif($statut['blocked'] >= 1) { $etat = 4 ; } elseif($statut['spam'] >= 1) { $etat = 5 ; } //--- pour réduire le nb de requête la MAJ se fait uniquement si l'état est différent de la valeur en DB. if($etat != $abo['etat']) { //--- Met à jour l'état d'un destinataire $sql = 'UPDATE newsletter_abonne SET newsletter_abonne.etat = '.$etat.', newsletter_abonne.derniere_modification = Now() WHERE newsletter_abonne.mail = \'' . $abo['mail'] . '\' AND newsletter_abonne.id_groupe = ' . $groupe['id_groupe'] . '' ; $Result = mysql_query($sql) or die(mysql_error()) ; } } $html.='Mise à jour de ' . $i . ' statut'.($i >=2 ? 's' : '').' d\'abonné pour le groupe "' . stripslashes($groupe['libelle']) . '" du client ' . stripslashes($groupe['societe']) . '<br />' ; } return $html; }
Partager