Planificateur de tâches PHP : guide complet sur les tâches cron et le Task Scheduler

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

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.php


2. 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                    

Recommendations