|
Voir le sujet précédent :: Voir le sujet suivant
|
| Auteur |
Message |
| |
|
thierry8 WRInaute accro

Inscrit le: 11 Juil 2005 Messages: 3252
|
Posté le : Mar Déc 20, 2005 10:10 Sujet du message: Planification sous PHP !? |
|
|
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 ? |
|
| |
|
 |
Bourriquet WRInaute passionné

Inscrit le: 19 Sep 2005 Messages: 632
|
Posté le : Mar Déc 20, 2005 10:19 Sujet du message: Planification sous PHP !? |
|
|
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) |
|
| |
|
 |
ecocentric WRInaute accro

Inscrit le: 10 Fév 2004 Messages: 3262 Localisation: Mons
|
Posté le : Mar Déc 20, 2005 10:25 Sujet du message: Planification sous PHP !? |
|
|
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. |
|
| |
|
 |
Fab le Fou WRInaute accro

Inscrit le: 02 Déc 2004 Messages: 1484 Localisation: Lorient
|
Posté le : Mar Déc 20, 2005 12:37 Sujet du message: Planification sous PHP !? |
|
|
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...  |
|
| |
|
 |
thierry8 WRInaute accro

Inscrit le: 11 Juil 2005 Messages: 3252
|
Posté le : Mar Déc 20, 2005 14:23 Sujet du message: Planification sous PHP !? |
|
|
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 ) |
|
| |
|
 |
Bourriquet WRInaute passionné

Inscrit le: 19 Sep 2005 Messages: 632
|
Posté le : Mar Déc 20, 2005 14:43 Sujet du message: Planification sous PHP !? |
|
|
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  |
|
| |
|
 |
thierry8 WRInaute accro

Inscrit le: 11 Juil 2005 Messages: 3252
|
Posté le : Mar Déc 20, 2005 15:02 Sujet du message: Planification sous PHP !? |
|
|
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:
| Citation: |
DEBUT
Je fais ma news indique date et heure à laquel l'envoit doit s'effectuer...
Je valide
Le script récupère les infos (enregistre pour la news, et les infos nécessaire)
Programme (par exemple créer le fichier en question) à la période prévue
FIN |
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. |
|
| |
|
 |
yvan02 WRInaute impliqué

Inscrit le: 02 Mar 2005 Messages: 411 Localisation: Strasbourg
|
Posté le : Mar Déc 20, 2005 15:20 Sujet du message: Planification sous PHP !? |
|
|
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é. 
Dernière édition par yvan02 le Mar Déc 20, 2005 15:26; édité 1 fois |
|
| |
|
 |
Bourriquet WRInaute passionné

Inscrit le: 19 Sep 2005 Messages: 632
|
Posté le : Mar Déc 20, 2005 15:25 Sujet du message: Planification sous PHP !? |
|
|
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.
Dernière édition par Bourriquet le Mar Déc 20, 2005 20:12; édité 1 fois |
|
| |
|
 |
cybervince WRInaute passionné

Inscrit le: 01 Aoû 2004 Messages: 869 Localisation: Montpellier
|
Posté le : Mar Déc 20, 2005 20:10 Sujet du message: Planification sous PHP !? |
|
|
| Fab le Fou a écrit: |
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...  |
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...) |
|
| |
|
 |
Fab le Fou WRInaute accro

Inscrit le: 02 Déc 2004 Messages: 1484 Localisation: Lorient
|
Posté le : Mer Déc 21, 2005 10:39 Sujet du message: Planification sous PHP !? |
|
|
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. |
|
| |
|
 |
Bourriquet WRInaute passionné

Inscrit le: 19 Sep 2005 Messages: 632
|
Posté le : Mer Déc 21, 2005 10:52 Sujet du message: Planification sous PHP !? |
|
|
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. |
|
| |
|
 |
| |
|
|