OVH Cloud OVH Cloud

Faire un timer en php

4 réponses
Avatar
Fab
Je suis en train de developper un appli en php version ligne de commande et
je souhaiterai que cette appli tourne en tache de fond. Dans cette appli je
voudrai faire une sorte de timer afin que le code se lance toutes les XX
secondes. Est ce faisable? Si oui, où puis je trouver ces informations?

Cordialement

4 réponses

Avatar
Anthony Rossetto
[...]Dans cette appli je
voudrai faire une sorte de timer afin que le code se lance toutes les XX
secondes. Est ce faisable? Si oui, où puis je trouver ces informations?


Salut,

tu peux regarder du côté de la fonction sleep().

a +

Avatar
Marc
Je suis en train de developper un appli en php version ligne de commande et
je souhaiterai que cette appli tourne en tache de fond. Dans cette appli je
voudrai faire une sorte de timer afin que le code se lance toutes les XX
secondes. Est ce faisable? Si oui, où puis je trouver ces informations?



oui, c'est possible, enfin a condition que le traitement soit plus court
que le cycle d'activation, sinon il faudrait creer des sous-processus
(fork).

il faut tenir compte du temps d'execution du script puis faire un sleep
modulo le temps du cycle. Cela se fait que quelque opérations dont un
modulo, et la fonction time() qui donne le nombre de secondes ecoulées.

ce code fonctionne pour un cycle d'une heure (3600 secondes) :

<?php

$time = time();
$delay = 3600 - ( $time % 3600);

echo "time = $timen";
echo "delay = $delayn";


?>

Avatar
Marc
Je suis en train de developper un appli en php version ligne de commande et
je souhaiterai que cette appli tourne en tache de fond. Dans cette appli je
voudrai faire une sorte de timer afin que le code se lance toutes les XX
secondes. Est ce faisable? Si oui, où puis je trouver ces informations?


voila pour le plaisir un petit truc en OO :
dans le meme theme, regarde aussi cette page :

http://fr2.php.net/declare


<?php

error_reporting(E_ALL);

class Task{

var $name;
var $min;
var $max;

function Task($name, $min, $max){
$this->name = $name;
$this->min = $min;
$this->max = $max;
}

function run(){
$work = rand($this->min, $this->max);
echo "running task {$this->name} for $work secondsn";
sleep($work);
echo "running task {$this->name} donenn";

}
}

class Scheduler{
var $task;
var $period;
var $start;

function Scheduler($task){
$this->task = &$task;
}

function run($period){

$this->period = $period;

# get starting time.
$this->start = time();

$this->task->run();
$this->sleep();
}

# wait for complete period
function sleep(){
$delay = time() - $this->start;
$sleep = $this->period - ($delay % $this->period);
echo "sleeping $sleepn";
sleep($delay);
}
}


$task = new Task('test', 1, 5);
$scheduler = new Scheduler($task);

while(1){
$scheduler->run(10); # run every 10s
}
?>

Avatar
fp
Bonjour,

Tu peux aussi le lancer via la crontab (mais la fréquence max est 1
minute) avec tous les intervales que tu veux. En plus ça permet de
redémarrer même si ton script plante ou si ton serveur reboot.

sinon, si tu restes sur ton idée, tu peux faire une boucle while(1) et
commencer (ou finir) par un sleep qui fera patienter ton script le temp
de ta tempo.

A+
Franck


Je suis en train de developper un appli en php version ligne de commande et
je souhaiterai que cette appli tourne en tache de fond. Dans cette appli je
voudrai faire une sorte de timer afin que le code se lance toutes les XX
secondes. Est ce faisable? Si oui, où puis je trouver ces informations?

Cordialement