Exécution automatique de scripts php (cron)

Soyez le premier à donner votre avis sur cette source.

Vue 37 200 fois - Téléchargée 1 404 fois

Description

C'est plus une explication qu'une source (oops!)... Pour exécuter un script à une heure/date choisie, on n'échappe pas au programme 'cron' qui se trouve sur Unix/Linux, mais pas sur Windows. Si votre fournisseur d'accès vous y donne l'accès (comme fait le mien, thanx!) ou si vous êtes votre propre hébergeur et que vous tournez sur Linux, vous pouvez utiliser ce script tout simple qui vous permet d'ajouter des tâches à exécuter (des tâches PHP), comme des sauvegardes de base de données, par exemple.

Plus d'infos sur cron sur http://www.unixgeeks.org/security/newbie/unix/cron-1.html entre autres.

Enjoy! Malik7934

Source / Exemple :


<?php

// ce script doit être appelé par un formulaire

// Exemple: 
// Exécuter le fichier se trouvant à l'adresse 
// http://localhost/happynewyear.php à nouvel an:
//
// url : http://localhost/happynewyear.php
// minute: 0
// heure : 0
// jour de la semaine: *
// mois : 1
// jour du mois : 1

// Préparation de la requête
// ces données viennent d'un formulaire

$url		= $_POST['url'];
$minute		= $_POST['minute'];
$heure		= $_POST['heure'];
$dayweek	= $_POST['dayweek'];
$day		= $_POST['day'];
$month		= $_POST['month'];

//       The time and date fields are:
//
//              field          allowed values
//              -----          --------------
//              minute         0-59
//              hour           0-23
//              day of month   1-31
//              month          0-12 (or names, see below)
//              day of week    0-7 (0 or 7 is Sun, or use names)
//
//       A field may be an asterisk (*), which always stands for ``first-last''.

$texte  = $minute." ".$heure." ".$day." ".$month." ".$dayweek." ";

// pour exécuter un script php en ligne de commande: php -f
$texte .= "php -f ".$url;

// Ecriture de la requête dans un fichier (pensez aux droits)

$fichier = "cront.cron";
$fil = fopen($fichier,'a');
if(fputs($fil,$texte."\n"))
	echo "La requete ".$texte." a ete enregistree<BR>";
else 	{
	echo "Erreur! La requete ".$texte." n'a pas ete enregistree!";
	exit();
	}

// Exécution de cron avec votre username à la place de YOURUSERNAME

if(passthru('crontab YOURUSERNAME cront.cron'))
	echo "La requete ".$texte." a ete ajoutee a la liste des taches";
else 	echo "Erreur! La requete ".$texte." n'a pas ete ajoutee a la liste des taches!";
?>

Conclusion :


C'est un script minimaliste. Comme je l'ai dit, c'est plus une explication qu'une source ;o) Les remarques CONSTRUCTIVES sont bien sûr les bienvenues...

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

HRdesalpes
Messages postés
64
Date d'inscription
vendredi 21 novembre 2003
Statut
Membre
Dernière intervention
29 juillet 2006
-
si tu posséde un dédié il est totalement bette d'utiliser le php pour faire du crontab et je parle pas des dangers de sécurité.
utilise crontab -e username en remplacant username par le nom d'utilisateur qui a les droits si c'est pour qu'il se rendent sur un script php tu met un wget dans l'user d'apache et le tour es joué.
Surtout que se script ne prends pas en charge les commande comme toutes les 5 minutes qui sont représenté par */5
mgserv
Messages postés
3
Date d'inscription
vendredi 2 juin 2006
Statut
Membre
Dernière intervention
13 avril 2009
-
Salut a tous, moi j'ai installer un serveur web sur un dédié OVH.

Quand j'execute ton fichier j'ai ce probleme.

Warning: fopen(cront.cron) [function.fopen]: failed to open stream: Permission denied in /home/Cron/cronit.php on line 44

Warning: fputs(): supplied argument is not a valid stream resource in /home/Cron/cronit.php on line 45

Pourtant mon cron est en chmod777

Quelqu'un peut il m'expliquez

merci d'avance
Oxydoreduction
Messages postés
4
Date d'inscription
vendredi 17 août 2007
Statut
Membre
Dernière intervention
23 août 2007
-
Ouaif, bon, c'est pas ce qui m'a arrêté. Suis-je le seul a faire un don Paypal quand j'utilise un open-source ou un truc du genre ?... nooon, allez, me faites pas peur ! lol.

Pour être plus constructif, et être plus clair à propos du "activations non sollicitées", avec un cron en http, il peut-être interessant de penser à proteger son script avec un .htaccess pour être sûr que c'est pas un lambda qui vous le déclanche. (bon, y'a ça sur Saint Pit', ma curiosité m'ayant piqué, je me suis inscrit a webcron mais j'ai pô encore reçu mon code :-( ).
En fait, je vous parle d'expérience, j'ai un petit malin (de mes amis) qui me déclanchait un script de sauvegarde de ma base de données toutes les deux minutes (vu que c'était un peu lourd, il m'a ralenti le serveur sérieux pendant deux jours avant que je m'en apperçoive).
malik7934
Messages postés
1162
Date d'inscription
mardi 9 septembre 2003
Statut
Membre
Dernière intervention
15 août 2009
1 -
J'ai fais un saut sur st-pitoune...
"tu t?inscrits ici, et tu te laisses guider. Un coup d'AlloPass et tu t?ouvres 200 requêtes minimum."

Payer pour ça? Non, merci...
Oxydoreduction
Messages postés
4
Date d'inscription
vendredi 17 août 2007
Statut
Membre
Dernière intervention
23 août 2007
-
Super idée. Par contre faut avoir un 777 sur le fichier cron. Et là c'est pas gagné...
Pareil que webcron t'a www.saint-pitoune-la-creuviere.com aussi qu'est sympa (fo se taper l'adresse à ralonge mais bon, c'est rigolo). Mais faut avoir un script accessible par http... attention aux activations non sollicitées.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.