Exécuter une tache cron à chaque fin de mois

Eléphant du PHP | 81 Messages

09 mai 2006, 10:40

Bonjour,
J’ai besoin de faire une tache cron sur WEBMIN que j’exécute à chaque fin de mois.
Ma question est la suivante : si je lui dis d’exécuter le script tous les 31 du mois, va-t-il l’exécuter même si il n’y a que 30 ou 28 jours dans le mois ???
Je pense que la réponse va être négative, mais dans ce cas la comment exécuter une tache cron a chaque fin de mois ?

Merci

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

09 mai 2006, 10:45

Et si tu executait simplement ta commande le 1er du mois à 00h00 ? ;)
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphant du PHP | 81 Messages

09 mai 2006, 10:52

oui en effet mais dans ce cas là comment je dois m'y prendre pour ne récupérer que les données du mois précédent ? En fait j'ai besoin de récupérer toutes les factures éditées au cours du mois.

Donc si je mets une tache cron le 1er du mois, je devrair récupérer toutes mes factures du mois précédent.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

09 mai 2006, 10:54

Et alors ? techniquement, ce n'est pas très compliqué, non ? ;)
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphant du PHP | 81 Messages

09 mai 2006, 11:01

heu... avec mon p'tit niveau en PHP, je suis rapidement en surchauffe !!!
Merci quand même je vais essayé de trouver une solution.
A+

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

09 mai 2006, 11:05

Quand tu récupères une date, tu la décompose en jour, mois et annee, tu enlève 1 au mois et tu recompose la date :arrow: tu as le 1er jour du mois précédent ;)
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphant du PHP | 81 Messages

09 mai 2006, 11:41

Merci Zeus, mais je me demandais si je n'aurais pas un problème en chaque début d'année ? Si je soustrait un mois en janvier il me resortira bien le mois de décembre ?

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

09 mai 2006, 11:44

C'est vrai, tu as touché à la joie des dates.

Je ne peut que te conseiller la librairie PEAR::Date qui gère très bien les navigations dans les date
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

ViPHP
ViPHP | 2144 Messages

09 mai 2006, 11:48

oui, mais bon, suffit de faire un petit test sur le mois, si après décrémentation du mois d'une unité, on obtient zéro, il suffit de mettre douze dans la variable. Meme problème mais si on voulait le mois suivant, si mois vaut 13, on le met à un.

Eléphant du PHP | 81 Messages

09 mai 2006, 11:58

ok merci pour vos pistes j'essaie tout ça et vous tiens au courant.

Eléphant du PHP | 153 Messages

09 mai 2006, 15:22

Sinon enregistrement de la date de la dernière exécution dans une base de données ou un fichier, et cahque début de mois ouverture de ce fichier et récupération de tous les fichiers disponible au delà de cette date :)
$temps = file_get_contents("derniereMaj.txt");
$f = fopen("derniereMaj.txt","w");
fputs($f, time());
fclose($f);
et ensuite tes traitements avec la date du début du précédent mois dans $temps :)
http://gl2.delcedo.com/ Galaxialord 2 !

Administrateur PHPfrance
Administrateur PHPfrance | 3131 Messages

09 mai 2006, 16:11

Si tu n'es pas l'auteur de l'application dont l'exécution est à planifier, en effet il peut être difficile d'aller la modifier pour qu'elle se comporte comme tu le souhaites.

Le plus simple est de passer par un script shell, chaque jour tu exécutes un script qui en substance va faire :

Code : Tout sélectionner

SI aujourd'hui = dernier jour du mois: exécuter application FINSI
(on peut varier sur le même theme : chaque mois on exécute un script shell qui calcule le dernier jour du mois et lance une planification unique de l'application sur ce jour là)

Mais pour ça tu dois avoir accès au shell.

Eléphant du PHP | 81 Messages

10 mai 2006, 12:51

Voici comment j’ai résolu mon problème.
J’ai utilisé une classe de manipulation de Dates, à cette adresse
Ma tache cron est fixée au 1er de chaque mois
Grâce à cette classe je soustrais 1 jour pour récupérer la date du mois précédent et le tour est joué.
Merci à tous
pierre