Séquencement d'un script PHP

WRInaute impliqué
Bonjour,

Je suis assez souvent confronté à devoir 'séquencer' un script PHP, je m'explique...
Par exemple si vous envoyez une grosse newsletter, en général vous n'envoyez pas à tous les destinataires dans le même script qui risquerait de générer une saturation du serveur email, qui génèrerait une surcharge ponctuelle trop forte du serveur, qui génèrerait un script trop long en temps d'exécution etc... Donc la plupart du temps, on va envoyer paquets par paquets en espaçant dans le temps. C'est une méthode manuelle qui me semble archaïque...
Quelles sont les méthodes plus 'pro' qui permettent par exemple d'envoyer un email toutes les secondes par exemple?

Merci par avance pour vos conseils ;-)
 
WRInaute accro
Perso j'utilise un système de CRON qui lance un fichier PHP toutes les 15 minutes et gère les envois par paquet de 500. La plupart des script de newsletter , type Wanenewsletter, fonctionne ainsi.
 
WRInaute impliqué
Oui, le CRON va automatiser les lancement des scripts, mais ça reste quand même basique ;-)
J'imaginais qu'il pourrait exister des méthodologies que je ne connais pas...?
De plus CRON n'est toujours pas disponible simplement dans PHP, mais reste lié au système UNIX si je ne me trompe pas?
J'aurais bien imaginé un système PHP avec par exemple des boucles incluant des fonctions type sleep...

J'avais aussi un jour buté sur un système d'indexation qui devait crawler des sites sans effondrer les sites... Faudrait voir comment sont développés les crawler...
 
WRInaute impliqué
OJAL a dit:
J'aurais bien imaginé un système PHP avec par exemple des boucles incluant des fonctions type sleep...

YAPLUKA j'ai envie de dire
c'est effectivement la solution

max execution time dans le php.ini à 0 pour le CLI seulement
puis apres des bons while et des sleep au bonne endroit

1 seule execution qui se pilote toute seule

bon quand ca crash faut récupérer le coup aussi :)
 
WRInaute accro
tu peut aussi utiliser tes visiteurs pour ce travail ;-)

J'ai un truc chez free qui fonctionne sans CRON. Le truc c'est que j'ai un $time_work dans un fichier de config et si le $current_time >= $time_work je déclenche la micro action suivante et je met a jour le $time_work. Le test est fait sur chaque page visité bien sur donc c'est au fil des visites que se déclenche le travail (c'est valable si tu as de la visite bien sur)

Sinon dans les archaïques a petits moyens, j'ai un autre truc plus 'manuel'.
Je découpe toujours ma tache en micro taches que j'exécute une a la fois depuis mon navigateur avec un document.location.replace en javascrpit lui même déclanché par settimeout

Code:
   <script language="JavaScript">
    setTimeout("document.location.replace('http://www.example.org/micro-action.php?param_action=XXXXX')",2000); 
   </script>

Le CRON reste LE TRUC a avoir sous la main quitte a prendre un hébergement rien que pour ça et gérer tout depuis ce domaine (rien n'empêche de faire un fopen sur une url autre que l'hébergeur du cron).
 
WRInaute impliqué
Sur des serveurs dédiés type DEDIBOX, la mise en place de taches CRON est facile ou c'est vraiment un truc de 'barbu' ;-) :?:
 
WRInaute occasionnel
Oui la mise en place du cron est très facile si tu as un serveur dédié linux. Si c'est windows je suppose que le cron se nomme autrement, en francais automatisation des taches ou un truc dans le style si ma memoire est bonne (je sais qu'elle ne l'est pas c'est une expression)

La façon dont fonctionne les crawlers c'est des programmes, donc un process qui tourne en permanence sur le serveur. Là pas besoin de cron table, c'est une autre façon de faire.

Comme l'a dit bozoleclown tu peux aussi avoir un script php qui ne se termine jamais, ca ne fonctionne que si tu met la variable max_execution_script à 0 donc la aussi il faut avoir access a un serveur dédié.
 
WRInaute impliqué
OK merci ;-)

Quelle différence fais-tu entre un process qui tourne en permanence sur le serveur et un script PHP avec la variable max_execution_script à 0 :?:
 
WRInaute occasionnel
Pas de différence, un process peut etre un script ou un programme, mais
je disais juste un process qui tourne en permanence en pendant par exemple un programme compilé pour le serveur en question, comme un programme sur windows, au lieu d'être un script interprété par php, ca permettrait au programme d'etre plus rapide, donc utile pour une application qui en aurait besoin, mais dans la plupart des cas, un script php ou autre ca suffit :-)
 
WRInaute occasionnel
Sur un de mes sites, je dois intégrer un énorme fichier des ventes :
voilà ce que je fais :
je reçois le fichier, qui est déplacé dans un dossier
ce dossier (fichier plat) est scanné par une tache cron, toutes les 5 min.
-> si le fichier existe, je le tranche (vente_1, vente_2) par 1000 lignes et je l'archive (/archive)
-> sinon, je regarde si j'ai des tranches :
=> si oui, je lance mon script d'intégration avec le premier fichier, que je détruis
=> si non, je ne fais rien

Et voilà :)
 
WRInaute impliqué
Yop,

J'ai également eu à faire un système de séquencement de script pour l'envoi d'une newsletter et j'ai pu le faire assez facilement avec Curl ou fsockopen, si tu as pas curl.

Le principe est simple, une fois l'envoi de ma newsletter fait (pour autant qu'il doit se lancer de suite) j'ouvre une requête curl sur mon fichier d'envoi avec différents paramètres, le message etc. Je coupe direct ma connexion curl ou fsockopen, sans attendre le retour du serveur. Une fois le fichier lancé, il va s'appeler automatiquement tout seul après son traitement.

Cela me permet d'envoyer des newsletter de plusieurs milliers de personnes, sans avoir de problème de timeout et sans cron. Mais dans le cas ou il faut programmer un envoi, c'est mieux cron.
 
WRInaute impliqué
Merci Sir Dipp ;-)

Je n'ai pas tout compris :oops:

Que veux tu dire par :
j'ouvre une requête curl sur mon fichier d'envoi :?:

et

Je coupe direct ma connexion curl :?:

C'est peut être que je ne connais pas assez CURL... Si c'est le cas je vais potasser la doc ;-)
 
WRInaute accro
Séquencement d'un script PHP pour envoyer une newsletter et controler son envoie ???

simple il faut utiliser un meta refresh !! et ce n'est pas un gros mot !!

<meta http-equiv="Refresh" content="5">

Cela permet de visualiser l'envoie et de savoir si le script s'est correctement déroulé.

++
 

➡️ Offre MyRankingMetrics ⬅️

pré-audit SEO gratuit avec RM Tech (+ avis d'expert)
coaching offert aux clients (avec Olivier Duffez ou Fabien Faceries)

Voir les détails ici

coaching SEO
Discussions similaires
Haut