Planificateur de tâches PHP : guide complet
Le planificateur de tâches (Task Scheduler) est un outil essentiel pour toute application web fonctionnant sous PHP. Il permet d'automatiser l'exécution d'opérations courantes : envoi de newsletters par email, nettoyage du cache, génération de rapports, synchronisation de données avec des API externes, et bien plus encore. Contrairement à l'exécution manuelle de scripts, le planificateur garantit une exécution ponctuelle et fiable des tâches sans intervention de l'administrateur.
Approches de base pour implémenter un planificateur en PHP
Il existe deux méthodes principales pour implémenter un planificateur de tâches dans les projets PHP :
- Cron système (Linux/Unix) — utilisation du démon cron intégré pour appeler des scripts PHP selon un calendrier.
- Planificateur personnalisé (Task Scheduler) — implémentation de la logique de planification directement dans le code PHP à l'aide de boucles et de vérifications temporelles.
1. Cron système avec PHP
L'approche la plus courante et la plus performante. Vous créez un script PHP qui effectue les actions nécessaires, puis vous ajoutez une entrée dans le crontab du serveur.
Exemple de script PHP pour cron (cron_job.php) :
<?php// cron_job.php - nettoie les sessions obsolètesrequire_once 'config.php';require_once 'db.php';
$stmt = $pdo->prepare("DELETE FROM sessions WHERE last_activity < NOW() - INTERVAL 1 DAY");$stmt->execute();
// Journalisation de l'exécutionfile_put_contents('logs/cron.log', date('Y-m-d H:i:s') . " - Sessions nettoyées", FILE_APPEND);?>Entrée dans crontab (exécution toutes les heures) :
0 * * * * /usr/bin/php /var/www/html/cron_job.php2. Task Scheduler personnalisé en PHP
Si vous n'avez pas accès au cron système (par exemple, sur un hébergement mutualisé), vous pouvez implémenter un planificateur directement en PHP. Pour cela, on utilise un script spécial qui s'exécute à chaque visite du site ou via une requête HTTP.
Exemple de planificateur simple (task_scheduler.php) :
<?phpclass TaskScheduler { private $tasks = []; private $lastRunFile = 'last_run.json';
public function addTask($name, callable $callback, $interval) { $this->tasks[] = [ 'name' => $name, 'callback' => $callback, 'interval' => $interval // en secondes ]; }
public function run() { $lastRun = $this->getLastRunTimes();
foreach ($this->tasks as $task) { $lastTime = $lastRun[$task['name']] ?? 0; if (time() - $lastTime >= $task['interval']) { echo "Exécution de la tâche : {$task['name']}"; call_user_func($task['callback']); $lastRun[$task['name']] = time(); } }
file_put_contents($this->lastRunFile, json_encode($lastRun)); }
private function getLastRunTimes() { if (file_exists($this->lastRunFile)) { return json_decode(file_get_contents($this->lastRunFile), true); } return []; }}
// Utilisation$scheduler = new TaskScheduler();
$scheduler->addTask('send_newsletter', function() { // Logique d'envoi de la newsletter echo "Newsletter envoyée";}, 3600); // Toutes les heures
$scheduler->addTask('clean_cache', function() { // Nettoyage du cache array_map('unlink', glob('cache/*.cache')); echo "Cache nettoyé";}, 86400); // Une fois par jour
$scheduler->run();?>3. Planificateur avancé avec prise en charge des expressions CRON
Pour une gestion plus flexible du calendrier, vous pouvez implémenter la prise en charge des expressions cron classiques (minute, heure, jour, mois, jour de la semaine).
Exemple d'analyseur d'expressions cron :
<?phpclass CronPar Aussi dans la bibliothèque
Authentification et autorisation en C++ : bibliothèques et exemples pratiques
rustls pour Rust : guide complet avec exemples
Rate limiting en C++ : bibliothèques et outils pour contrôler les requêtes
Génération Swagger/OpenAPI pour C++ : meilleurs outils et bibliothèques