PHP-Aufgabenplaner: Vollständige Anleitung
Der Aufgabenplaner (Task Scheduler) ist ein kritisches Werkzeug für jede Webanwendung, die auf PHP läuft. Er ermöglicht die Automatisierung von Routineoperationen: Versand von E-Mail-Newslettern, Cache-Bereinigung, Berichtserstellung, Datensynchronisation mit externen APIs und vieles mehr. Im Gegensatz zum manuellen Starten von Skripten gewährleistet der Planer eine zeitnahe und zuverlässige Ausführung von Aufgaben ohne Administratorbeteiligung.
Grundlegende Ansätze zur Implementierung eines Planers in PHP
Es gibt zwei Hauptmethoden zur Implementierung eines Aufgabenplaners in PHP-Projekten:
- System-Cron (Linux/Unix) — Verwendung des integrierten Cron-Daemons zum zeitgesteuerten Aufruf von PHP-Skripten.
- Benutzerdefinierter Planer (Task Scheduler) — Implementierung der Planungslogik direkt im PHP-Code unter Verwendung von Schleifen und Zeitprüfungen.
1. System-Cron mit PHP
Der gängigste und leistungsfähigste Ansatz. Sie erstellen ein PHP-Skript, das die gewünschten Aktionen ausführt, und fügen dann einen Eintrag zur Crontab des Servers hinzu.
Beispiel eines PHP-Skripts für Cron (cron_job.php):
<?php// cron_job.php - führt die Bereinigung veralteter Sitzungen durchrequire_once 'config.php';require_once 'db.php';
$stmt = $pdo->prepare("DELETE FROM sessions WHERE last_activity < NOW() - INTERVAL 1 DAY");$stmt->execute();
// Protokollierung der Ausführungfile_put_contents('logs/cron.log', date('Y-m-d H:i:s') . " - Sitzungen bereinigt", FILE_APPEND);?>Eintrag in der Crontab (stündliche Ausführung):
0 * * * * /usr/bin/php /var/www/html/cron_job.php2. Benutzerdefinierter Task Scheduler in PHP
Wenn Sie keinen Zugriff auf den System-Cron haben (z. B. bei Shared-Hosting), können Sie einen Planer direkt in PHP implementieren. Dazu wird ein spezielles Skript verwendet, das bei jedem Seitenbesuch oder über eine HTTP-Anfrage gestartet wird.
Beispiel eines einfachen Planers (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 // in Sekunden ]; }
public function run() { $lastRun = $this->getLastRunTimes();
foreach ($this->tasks as $task) { $lastTime = $lastRun[$task['name']] ?? 0; if (time() - $lastTime >= $task['interval']) { echo "Führe Aufgabe aus: {$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 []; }}
// Verwendung$scheduler = new TaskScheduler();
$scheduler->addTask('send_newsletter', function() { // Logik zum Versand des Newsletters echo "Newsletter versendet";}, 3600); // Jede Stunde
$scheduler->addTask('clean_cache', function() { // Cache-Bereinigung array_map('unlink', glob('cache/*.cache')); echo "Cache bereinigt";}, 86400); // Einmal täglich
$scheduler->run();?>3. Erweiterter Planer mit Unterstützung für CRON-Ausdrücke
Für eine flexiblere Zeitplanverwaltung kann die Unterstützung klassischer Cron-Ausdrücke (Minute, Stunde, Tag, Monat, Wochentag) implementiert werden.
Beispiel eines Parsers für Cron-Ausdrücke:
<?phpclass CronPar Auch in der Bibliothek
CLI-Frameworks für Kotlin: Clikt, kotlinx-cli, picocli – Überblick und Vergleich
SMS-Versand mit Java: Überblick über API-Bibliotheken und Tools
Internationalisierung (i18n) in JavaScript (Node.js): Die Bibliothek i18next
Überwachung von Java-Anwendungen: Die Bibliothek Micrometer und Integration mit Prometheus