Fichier unique pour déclenchement webcron

Contenu du snippet

Pour ceux qui n'ont pas accès à la crontable de leur hébergement et qui utilise un service du genre webcron.

C'est un fichier unique permettant de gérer différents cron basé sur un appel toutes les heures du fichier par un service de webcron.

Le fichier inclue un contrôle d'accès HTTP et affiche le nom des fonctions exécuter.

Cette version ne gère pas les arguments car je n'en ai pas besoin mais il suffit de changer presque rien pour que ça les gère.(cf explication call_user_func dans le manuel php)

Source / Exemple :


<?php
// liste des cron
function HelloWorld(){
	echo "Hello World";
}
//crontab
$crontab = array(
	array('hours'=>"ALL",'wday'=>"ALL",'mday'=>"ALL",'mon'=>"ALL",'year'=>"ALL",'name'=>"HelloWorld")
);
/*********************************************************************
Protection par mot de passe

                                                                                                                                            • /
// on test si $_SERVER['PHP_AUTH_USER'] et si $_SERVER['PHP_AUTH_PW'] possède une valeur // si c'est le cas on peux tester le login et le password if ( (isset($_SERVER['PHP_AUTH_USER']) && !empty($_SERVER['PHP_AUTH_USER'])) && (isset($_SERVER['PHP_AUTH_PW']) && !empty($_SERVER['PHP_AUTH_PW']))) { // on récupère le tout dans des variables $PHP_AUTH_USER = strip_tags($_SERVER['PHP_AUTH_USER']); $PHP_AUTH_PW = strip_tags($_SERVER['PHP_AUTH_PW']); //verification des password $user = $PHP_AUTH_USER; $pwd = $PHP_AUTH_PW; if($user!="user" || $pwd !="pwd"){ header('HTTP/1.0 401 Unauthorized'); echo 'Unauthorized'; exit; } } else { // rien ne doit être sorti avant ceci // on demande de s'identifier avec le texte $my_message $my_message = "Login et mot de passe de connexion"; header('WWW-Authenticate: Basic realm="' . $my_message . '"'); header('HTTP/1.0 401 Unauthorized'); // en cas d'annulation echo 'En cas de problème, contacter l\'aministrateur.'; exit; } /***********************************************************************/ /* fonctionne avec un webcron ou cron activé toutes les heures. hours : 0 - 23 + ALL pour toutes les heures wday : 0-6 (dimanche à samedi) + ALL pour tous les jours mday : 1-31 + ALL pour tous les jours mon : 1-12 (janvier à décembre) + ALL pour tous les mois year : n°année + ALL pour tous les ans
  • /
function activeCron($cron){ $active = false; $now = getdate(); $h = $now['hours']; $wd = $now['wday']; $md = $now['mday']; $m = $now['mon']; $y = $now['year']; //hours if($cron['hours']=="ALL") $active = true; else if($cron['hours']==$h) $active = true; else return false; //wday if($cron['wday']=="ALL") $active = true; else if($cron['wday']==$wd) $active = true; else return false; //mday if($cron['mday']=="ALL") $active = true; else if($cron['mday']==$md) $active = true; else return false; //mon if($cron['mon']=="ALL") $active = true; else if($cron['mon']==$m) $active = true; else return false; //year if($cron['year']=="ALL") $active = true; else if($cron['year']==$y) $active = true; else return false; return $active; } function runCron($cronName){ call_user_func($cronName); echo "<br/>$cronName"; } function runCrontab($crontab){ foreach($crontab as $cron){ if(activeCron($cron)) runCron($cron['name']); } } runCrontab($crontab); ?>

Conclusion :


Les commentaires sont synthétiques mais si ça peut servir à quelqu'un ...

Je suis ouvert à toutes les remarques.

A voir également

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.