Planification sous PHP !?

Discussion dans 'Développement d'un site Web ou d'une appli mobile' créé par thierry8, 20 Décembre 2005.

  1. thierry8
    thierry8 WRInaute accro
    Inscrit:
    11 Juillet 2005
    Messages:
    2 728
    J'aime reçus:
    0
    Bonjour,

    Je souhaiterai pouvoir planifier des tâches sous PHP, mais je n'ai aucune idée de la faisabilité de la chose.
    Etant donné que PHP est interprété uniquement lorsqu'une requête est effectué, j'ai un doute...

    Est-il possible par exemple, d'envoyer une newsletter à une période donnée ?
     
  2. Bourriquet
    Bourriquet WRInaute impliqué
    Inscrit:
    19 Septembre 2005
    Messages:
    561
    J'aime reçus:
    0
    Le php est disponible aussi en ligne de commande.

    Il y a même une extension dévelopée pour ( CLI : command ligne interface).

    Cependant le module CGI convient tout à fait : tu as juste à faire précéder ton code php d'une ligne, qui contient le chemin vers l'interprêteur php

    En général sous linux , ça se traduite par mettre :

    #!/usr/local/lib/php

    Comme c'est le module CGI, il va envoyer des entêtes HTTP que tu peux désactiver avec l'option -q

    Ce qui donne :

    #!/usr/local/lib/php -q

    < ? php

    ton code

    ? >

    Après il te suffit de programmer ton script en tâche planifée (sous linux tâche CRON)
     
  3. ecocentric
    ecocentric WRInaute accro
    Inscrit:
    10 Février 2004
    Messages:
    2 653
    J'aime reçus:
    0
    Sinon, tu peux créer un script externe en Perl ou en Python, qui apelle le script PHP à intervalle régulier.

    Il y a aussi Webcron et cie, que l'on rappelle souvent sur WRI.
     
  4. Fab le Fou
    Fab le Fou WRInaute passionné
    Inscrit:
    2 Décembre 2004
    Messages:
    1 109
    J'aime reçus:
    0
    C'est marrant, je viens de plancher sur le problème pour mon script de petites annonces, dont la cache et la bd doivent être nettoyés régulièrement pour supprimer les annonces périmées...

    Ma solution, qui a la mérite de fonctionner sur un mutu, consiste à commencer par créer manuellement un fichier que j'appelle par exemple "next_mod.php".

    Ce fichier contiendra la première date de lancement de ta procédure (dans ton cas, l'envoi de ta newsletter).

    Quand je parle de date, je parle en fait du timestamp, qui est le nombre de seconde depuis le 1er janvier 1970, donc un nombre entier plus facile à manipuler qu'une date et que tu obtiens en lancant la fonction time().

    Ensuite, tu insère un bout de code, par exemple sur ta page d'acceuil qui peut ressembler à ça :

    Code:
    <?
    //--le fichier contenant la date du prochain lancement
    include("next_mod.php"); 
    $date_actuelle=time();
    if($date_actuelle>=$next_mod)
     {
     //--si la date est dépassée tu lances ici ta procédure.
     ta_procedure();
    //--puis tu mets à jour la date du prochain lancement
    //--dans mon cas j'ajoute 86400 secondes qui correspond à 24H...
     $next_mod=time()+86400;
     $code="<?";
     $code.="\$next_mod=$next_mod;";
     $code.="?>";
     $adresse="next_mod.php";
     $myfile=fopen($adresse,"w");
     fwrite($myfile,$code);
     fclose($myfile);
     }
    ?>
    Il suffit qu'une personne se connecte à la page sur laquelle se trouve ce script pour que la date de mise à jour soit vérifiée, et la procédure lancée le cas échéant... :wink:
     
  5. thierry8
    thierry8 WRInaute accro
    Inscrit:
    11 Juillet 2005
    Messages:
    2 728
    J'aime reçus:
    0
    Cela implique qu'il faille qu'un internaute aille sur le site...
    Quels sont les possibilités avec le "cron", est-il possible de le manipuler facilement ? Car je souhaiterai pouvoir planifier pour chaque newsletter une date différente (heures différentes,etc..).

    Y a t-il des aides ? Des scripts déjà existant !

    Dans le cas contraire j'obterai pour la solution de Fab le Fou (un merci au passage ;) )
     
  6. Bourriquet
    Bourriquet WRInaute impliqué
    Inscrit:
    19 Septembre 2005
    Messages:
    561
    J'aime reçus:
    0
    Le cron fonctionne sur le principe d'un fichier qui contient les informations suivante :

    minute<espace>heure<espace>jourdumois<espace>mois<espace>jourdelasemaine<espace>la commande

    Par exemple

    25 6 30 12 * /home/users/www/script.php

    Exécutera le script le 30/12 à 6h25. Maintenant tu peux faire choses un peu plus poussée

    25 6 * 12 1 /home/users/www/script.php

    Lancera le script tout les lundi du mois de décembre à 6h25 .

    Ou alors:

    */5 6 30 12 * /home/users/www/script.php

    Lancera le script toutes les 12 min (60/5) à 6h le 30/12

    Ou bien encore

    25 6 30 10-12 * /home/users/www/script.php

    Lancera le script le 30/10, le 30/11 et le 30/12 à 6h25 .

    Pour faire ça en ligne de commande , tu as juste à taper :
    crontab -e

    Il va t'ouvrir un éditeur de texte, et tu tapes une tâche par ligne.

    Sinon, si tu as webmin, c'est encore plus simple, tu as gestionnaire graphique ;)

    Et si tu es chez un hébergeur mutualisé, normalement tu lui fourni le nom de tes scripts ainsi que les programmations, et normalement y a pas de souci :)
     
  7. thierry8
    thierry8 WRInaute accro
    Inscrit:
    11 Juillet 2005
    Messages:
    2 728
    J'aime reçus:
    0
    Ok j'ai bien compris le principe cela à l'air relativement "simple" !

    Mais la tu me dis d'ouvrir un éditeur via une ligne de commande !
    Mais si je ne peux accèder directement au serveur.

    En fait ce que je souhaite faire, c'est via un script en php activer ou programmer un cron.

    exemple:
    A ce niveau est-il possible de passer des paramètres ?
    25 6 * 12 1 /home/users/www/script.php

    Le fichier contenant la tâche et la période est supprimer une fois lue ? (bien entendue si cela est périodique il reste, mais le cas contraire ?)

    Merci de ton aide.
     
  8. yvan02
    yvan02 WRInaute occasionnel
    Inscrit:
    2 Mars 2005
    Messages:
    340
    J'aime reçus:
    0
    il y a pas mal d'hébergeurs qui acceptent de planifier des taches.

    Par exemple, j'utilises cette fonctionnalité sur mon site qui est chez OVH (60GP), pour purger ma BD et lancer des inscriptions automatiques la nuit. Il suffit de leur faire un mail en leur indiquant le script php à lancer, l'heure, et la périodicité. :wink:
     
  9. Bourriquet
    Bourriquet WRInaute impliqué
    Inscrit:
    19 Septembre 2005
    Messages:
    561
    J'aime reçus:
    0
    tu peux le faire via une commande en php comme shell_exec mais il faut que l'utilisateur qui lance le script ait les droits de modification des cron .

    Il est tout à fait possible de passer des paramètres au script PHP. Pour l'extension CLI tu aurais du utiliser $_SERVER['argc'] et $_SERVER['argv'], mais avec le module CGI, ça se présente comme si tu tapais l'URL du script dans le navigateur :

    script.php?page=prout&id=2

    En ligne de commande (et donc dans le cron) :

    /chemin/absolu/vers/le/script.php<espace>page=prout<espace>id=2

    Le cron permet de programmer des taches cycliques. Si tu veux programmer une tache ponctuelle, tu dois soit :
    - virer la ligne une fois la tâche accomplie
    - ne pas passer par cron mais par 'at'

    Syntaxe de at :

    at heure:minute mois/jour/annee tache

    Par exemple :

    at 6:25 11/12/05 /home/users/script.php

    Programmation de la tâche pour le 12 novembre 2005 à 6h25.
     
  10. cybervince
    cybervince WRInaute impliqué
    Inscrit:
    1 Août 2004
    Messages:
    684
    J'aime reçus:
    0
    A utiliser avec précaution, car si le traitement que tu souhaite lancer périodiquement est relativement long, et bien le visiteur qui va tomber dessus il va mettre du temps à afficher sa page.
    Personnellement pour mes url de maintenance, c'est ma machine chez moi qui les appelle via sa crontab (ca fait pareil que si c'était webcron) en fesant un wget de la bonne url (et j'ai un .htaccess qui sécurise le truc avec un user, mais à la rigueur vu que c'est que des scripts de maintenance qui ne font des purges...)
     
  11. Fab le Fou
    Fab le Fou WRInaute passionné
    Inscrit:
    2 Décembre 2004
    Messages:
    1 109
    J'aime reçus:
    0
    Bah disons que si ton script est long il vaut mieux le mettre en pied de page, mais de toute façon dans mon cas il s'agit d'un script assez rapide (du fait même qu'il est lancé tous les jours).

    Ton système sous-entend que ta machine soit connectée 24h/24.

    Un de mes buts, c'est que mon script soit complètement portable sur tout serveur supportant le php, donc intégré au code.
     
  12. Bourriquet
    Bourriquet WRInaute impliqué
    Inscrit:
    19 Septembre 2005
    Messages:
    561
    J'aime reçus:
    0
    cybervince > dans son cas ça pourrait aussi fonctionner sous window avec une tâche planifiée sur son poste.

    Mais je ne suis pas trop pour ce genre de méthode car elle n'est pas très "propre", au niveau du débugage et de la conception.
     
Chargement...
Similar Threads - Planification PHP Forum Date
Planification de scripts PHP ? Administration d'un site Web 14 Mars 2003
Alternative outil de planification des mots clés AdWords 11 Septembre 2016
L'outil de planification des mots clé de Google Référencement Google 23 Juin 2016
Résultats des outils de planification AdWords 2 Décembre 2015
Planification des Mots Clés : Large, expression, exact à la main ? AdWords 29 Juillet 2013
[Cron] Planification de tâches Administration d'un site Web 9 Octobre 2006
Adwords Planification des annonces par jours/heures AdWords 19 Juin 2006
Indent en mode PHP ? Développement d'un site Web ou d'une appli mobile 9 Juin 2022
Arborescence de classes PHP et séquentialité. Développement d'un site Web ou d'une appli mobile 16 Mai 2022
Afficher des infos depuis plusieurs page en PHP Développement d'un site Web ou d'une appli mobile 23 Mars 2022
Sites de scripts PHP, jQuery, Ajax, etc. Le café de WebRankInfo 20 Mars 2022
Détecter arrêt user d'un script PHP ? Développement d'un site Web ou d'une appli mobile 28 Décembre 2021
sessions PHP sans cookies ? Développement d'un site Web ou d'une appli mobile 26 Décembre 2021
Afficher la dernière version d'un fichier php ? Développement d'un site Web ou d'une appli mobile 8 Novembre 2021
PHP / CURL : interrogation page tiers ne fonctionne plus Développement d'un site Web ou d'une appli mobile 2 Octobre 2021
Actualiser un script php toutes les 10 secondes Développement d'un site Web ou d'une appli mobile 6 Septembre 2021
PHP : problème de comparaison égalité dans boucle FOR avec incrément décimal de 0.1 Développement d'un site Web ou d'une appli mobile 26 Août 2021
Cache Etag nginx et PHP ? Administration d'un site Web 7 Août 2021
Fichier avec ou sans extension php pour le référencement Crawl et indexation Google, sitemaps 3 Août 2021
mon code ne fonctionne pas pour masquer les .php URL Rewriting et .htaccess 31 Juillet 2021