1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110
| <?php
set_time_limit(0);/*permet au script de s'éxécuter indéfiniment */
ignore_user_abort(1);//La fermeture du navigateur peut être ignorée par
function fini()
{
fopen('./ERREUR', 'w');
}
register_shutdown_function(fini());
while(1)
{
if file_exists('STOP') { die("script arrêté. Effacez le fichier STOP avant de reprendre") }
$next = getNextExecutionTime(); /* on récupère l'heure (timestamp) de la prochaine éxécution */
$indexScript = getNextExecutionScript(); /* on récupère le numéro du prochain script à éxécuter */
$dodo = $next - time(); /* le temps en seconde qu'il faut pour arriver à $next */
sleep($dodo); /* on dort jusqu'à ce qu'il soit temps d'éxécuter le script */
fopen($scripts[$indexScript]['EmailAutomatique.php'], 'r') /* on lance le script. */
/* fopen peut être remplacé par une autre méthode, (shell_exec...) */
$scripts[$indexScript]['prochain'] = setNextExecutionTimeForScript($indexScript); /* prochaine éxécution */
}
function getNextExecutionScript()
{
global $scripts;
foreach($scripts as $index => $script)
{
if($script['prochain'] < $min || !(isset($min)))
{
$min = $script['prochain'];
$minIndex = $index;
}
}
return $minIndex;
}
function setNextExecutionTimeForScript($indexScript)
{
global $scripts, $a, $m, $j, $h, $min;
$aNow = date("Y");
$mNow = date("m");
$jNow = date("d");
$hNow = date("H");
$minNow = date("i")+1;
$a = $aNow;
$m = $mNow - 1;
while(prochainMois($indexScript) != -1) /* on parcourt tous les mois de l'intervalle demandé */
{ /* jusqu'à trouver une réponse convanable */
if ($m != $mNow || $a != $aNow) /*si ce n'est pas ce mois ci */
{
$j = 0;
if (prochainJour($indexScript) == -1) /* le premier jour trouvé sera le bon. */
{ /* -1 si l'intersection entre jour de semaine */
/* et jour du mois est nulle */
continue; /* ...auquel cas on passe au mois suivant */
}else{ /* s'il y a un jour */
$h=-1;
prochainHeure($indexScript); /* la première heure et la première minute conviendront*/
$min = -1;
prochainMinute($indexScript);
return mktime($h, $min, 0, $m, $j, $a);
}
}else{ /* c'est ce mois ci */
$j = $jNow-1;
while(prochainJour($indexScript) != -1) /* on cherche un jour à partir d'aujourd'hui compris */
{
if ($j > $jNow) /* si ce n'est pas aujourd'hui */
{ /* on prend les premiers résultats */
$h=-1;
prochainHeure($indexScript);
$min = -1;
prochainMinute($indexScript);
return mktime($h, $min, 0, $m, $j, $a);
}
if ($j == $jNow) /* même algo pour les heures et les minutes */
{
$h = $hNow - 1;
while(prochainHeure($indexScript) != -1)
{
if ($h > $hNow)
{
$min = -1;
prochainMinute($indexScript);
return mktime($h, $min, 0, $m, $j, $a);
}
if ($h == $hNow)
{
$min = $minNow - 1;
while(prochainMinute($indexScript) != -1)
{
if ($min > $minNow) { return mktime($h, $min, 0, $m, $j, $a); }
/* si c'est maintenant, on l'éxécute directement */
if ($min == $minNow)
{
fopen($scripts[$indexScript]['URLScript'], 'r');
}
}
}
}
}
}
}
}
}
?> |
Partager