Maximum execution time out ....

DrAgOnLORdS Messages postés 24 Date d'inscription samedi 21 juin 2003 Statut Membre Dernière intervention 24 mars 2008 - 19 janv. 2006 à 15:48
franc666 Messages postés 3 Date d'inscription mercredi 26 novembre 2003 Statut Membre Dernière intervention 26 janvier 2006 - 26 janv. 2006 à 00:46
Bonjour tout le monde,

J'ai fait des recherches sur le sujet mais rien trouvé de très concret ...

lors de l'envoie d'une newsletter je reçois le message d'erreur decrit dans le titre ...

je sais que c'est le delai imparti pour l'execution du script cote server ...
le probleme, c'est qu'il faut que j'envoie ces mails ...

je recupere selon le choix de l'admin (groupe et / ou utilisateur seul) les adresses mail dans un tableau, sur lequel j'effectue
soit un foreach
soit un while

dans les deux cas j'envoie le mail dans la boucle mais trop long je depasse le temps permis par le serveur ...
J'ai lu qu'on pouvait utiliser set_time_limit() mais tout les serveurs ne le permettent pas ...

Comment puis je procéder ?
Merci d'avance.

13 réponses

sidf Messages postés 1216 Date d'inscription mardi 20 décembre 2005 Statut Membre Dernière intervention 18 octobre 2012 5
19 janv. 2006 à 17:04
dans phpini , tu peux modifier le parametre (en secondes)

;;;;;;;;;;;;;;;;;;;
; Resource Limits ;
;;;;;;;;;;;;;;;;;;;

max_execution_time = 30 ; Maximum execution time of each script, in seconds
0
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
19 janv. 2006 à 17:30
Ou alors tu fais de l'envoi groupé (genre 1 à 100, 101 à 200 etc... )
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
19 janv. 2006 à 17:36
On peut aussi utiliser la bufferisation de sortie. Y a un exemple sympa (à retravailler) sur php.net, ça doit être dans ob_flush() ou dans ce coin-là en tous cas.
0
DrAgOnLORdS Messages postés 24 Date d'inscription samedi 21 juin 2003 Statut Membre Dernière intervention 24 mars 2008
19 janv. 2006 à 18:40
sidf -> si tu n'as pas accès au php.ini c'est la panade ...

FhX -> j'ai lu pas mal de truc sur ce moyen de faire, mon probleme a ce niveau c'est que je ne sais pas du tout comment recharger la page apres l'envoie des 100 premiers mail pour ensuite envoiyer les 100 suivant ....

malalam -> j'ai essaye flush() et ob_flush() -> marche pas ... ou alors m'y suis mal pris ...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
19 janv. 2006 à 19:28
Salut,

Malalam > ça fonctionnera pas mieux la bufferisation :-( c'est la fonction mail() qui bride ici (ou plutôt le serveur smtp).

En gros t'es obligé de : mettre le max_execution_time à zéro ou alors de passer par un envoi de paquets de mails (100 par exemple). Pour faire ça il te faut un id unique sur ta table ou alors un champ supplémentaire qui indiquera si oui ou non le mail est envoyé (un peu moins optimisé surtout si ta table n'a a beaucoup d'enregistrements).

Bref lorsque tu actualises (ça se fait automatiquement en php via un header('location:....) ou encore un header('refresh...

bref en input type="hidden" tu mets l'id de départ et d'arrivée, lorsque les mails sont envoyés tu incrémentes de 100 ces id et ça te donne les 100 prochains id à sélectionner (enfin la plage d'id). Et hop c'est torché ensuite.

a +

<hr size="2" width="100%"><li>Entraide, dépannage et vulgarisation informatique : Mon site de vulgarisation informatique</li><li>Codes-php.net</li>
0
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
19 janv. 2006 à 19:29
n'a a => n'a pas

désolé.

<hr size="2" width="100%"><li>Entraide, dépannage et vulgarisation informatique : Mon site de vulgarisation informatique</li><li>Codes-php.net</li>
0
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
19 janv. 2006 à 22:49
J'avais émis la solution il y a longtemps.
Il faut faire quelque chose de très simple à base de sessions par exemple couplé avec du passage par url :)

Une petite recherche sur le forum et tu trouveras un vieux code à moi. J'ai la flemme de le chercher voila pourquoi !
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
20 janv. 2006 à 07:35
sisi, avec la bufferisation c'est faisable : faut envoyer un caractère à la sortie tous les x mails. Un peu comme une barre de progress, quoi.
mais l'envoi groupé est aussi bien hein lol.
0
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
20 janv. 2006 à 10:58
Oui ça ok, mais ça n'empêchera pas le max_execution_timeout quand t'envoie trop de mails :-)

<hr size="2" width="100%"><li>Entraide, dépannage et vulgarisation informatique : Mon site de vulgarisation informatique</li><li>Codes-php.net</li>
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
20 janv. 2006 à 11:25
Bah non, évidemment, faut boucler sur l'envoi et la sortie.
0
DrAgOnLORdS Messages postés 24 Date d'inscription samedi 21 juin 2003 Statut Membre Dernière intervention 24 mars 2008
20 janv. 2006 à 11:39
existe t il une source simple et efficace pour eviter ce timeout ?

J'ai regarde sur le forum FhX mais euh bon, plus de 1000 msg ... chaud de retrouver ta source la dedans
0
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
20 janv. 2006 à 18:46
étapes à suivre :

afficher le formulaire une première fois, ensuite tu rentres tes infos que tu gardes en session par exemple, et tu fais des refresh en indiquant en session l'id de départ et d'arrivée, que tu incrémenteras à chaque refresh du nombre de messages envoyés.

<hr size="2" width="100%"><li>Entraide, dépannage et vulgarisation informatique : Mon site de vulgarisation informatique</li><li>Codes-php.net</li>
0
franc666 Messages postés 3 Date d'inscription mercredi 26 novembre 2003 Statut Membre Dernière intervention 26 janvier 2006
26 janv. 2006 à 00:46
Yop !

J'ai déjà eu le soucis

Voici ce que j'ai fais

J'ai une premiere page qui contient les infos de la newsletter à envoyer (l'admin choisi les options de la newsletter donc)

Ensuite quand il soumet la requête :
- creation d'une table avec le contenu de la requête que l'on nommera "temp_news"
- creation d'une table avec les paramètres de la newsletter (par exemple : le header from, le header reply-to, nombre total de lignes, nombre d'email à traiter par envoi (50 ou 100 c'est bien mais ça depend aussi de la taille de l'envoi)... etc) que l'on nommera "temp_param"
- ouverture du script php qui va envoyer les emails (dans un popup, dans une autre page, dans un iframe ou meme dans la meme page mais c'est pas du joli !)

Ce qui se passe dans le fichier qui envoye les emails :
1) On fait une requête sur les tables "temp_param" pour récupérer les paramètres de la newsletter et "temp_news" que l'on vient de créer qui va recuperer x lignes (définit par le nombre d'email à traiter par envoi) de la table (on utilise LIMIT pour ça bien sur)
2) Là on envoye l'e-mail défini dans la table dans le champ email (par exemple) pour chaque ligne,
3) Ensuite on efface les x lignes à qui on a envoyé les emails...
4) Là on rafraichit la page

Le script va maintenant repeter le processus indéfiniment...
Bien sur il faut qu'il s'arrete ! Il faut simplement mettre une condition au rafraichissement de la page
Par exemple un petit SELECT COUNT(*) ? et si le resultat de cette requête vaut 0 alors le processus d'envoi est terminée on n'a plus qu'a afficher un message "Bravo tout est envoyé" et surtout aussi on supprime les 2 tables qu'on a crée, puisqu'on a terminé l'envoi...


Voilà comment segmenter un envoi d'email en masse sans se prendre la tete pour savoir si le script fonctionne sur tel ou tel serveur...
Je vous conseille aussi de supprimer ligne par ligne (meme si ça bouffe plus de ressources) comme ça si la connexion plante il suffit de relancer le script d'envoi pour reprendre l'envoi où il en était sans avoir perdu d'email et sans envoyer 2 fois le meme email à quelqu'un...

Tchuss

FuR[i]OuS
0
Rejoignez-nous