Planificador de tareas PHP: guía completa
El planificador de tareas (Task Scheduler) es una herramienta críticamente importante para cualquier aplicación web que funcione con PHP. Permite automatizar la ejecución de operaciones rutinarias: envío de boletines por correo electrónico, limpieza de caché, generación de informes, sincronización de datos con API externas y mucho más. A diferencia de la ejecución manual de scripts, el planificador garantiza la ejecución oportuna y confiable de las tareas sin intervención del administrador.
Enfoques básicos para implementar un planificador en PHP
Existen dos formas principales de implementar un planificador de tareas en proyectos PHP:
- Cron del sistema (Linux/Unix) — uso del demonio cron integrado para invocar scripts PHP según un horario.
- Planificador personalizado (Task Scheduler) — implementación de la lógica de planificación directamente en el código PHP utilizando bucles y comprobaciones de tiempo.
1. Cron del sistema con PHP
El enfoque más común y eficiente. Usted crea un script PHP que realiza las acciones necesarias y luego agrega una entrada en el crontab del servidor.
Ejemplo de script PHP para cron (cron_job.php):
<?php// cron_job.php - realiza la limpieza de sesiones antiguasrequire_once 'config.php';require_once 'db.php';
$stmt = $pdo->prepare("DELETE FROM sessions WHERE last_activity < NOW() - INTERVAL 1 DAY");$stmt->execute();
// Registro de ejecuciónfile_put_contents('logs/cron.log', date('Y-m-d H:i:s') . " - Sesiones limpiadas", FILE_APPEND);?>Entrada en crontab (ejecutar cada hora):
0 * * * * /usr/bin/php /var/www/html/cron_job.php2. Task Scheduler personalizado en PHP
Si no tiene acceso al cron del sistema (por ejemplo, en un hosting compartido), puede implementar un planificador directamente en PHP. Para ello, se utiliza un script especial que se ejecuta en cada visita al sitio o mediante una solicitud HTTP.
Ejemplo de un planificador 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 segundos ]; }
public function run() { $lastRun = $this->getLastRunTimes();
foreach ($this->tasks as $task) { $lastTime = $lastRun[$task['name']] ?? 0; if (time() - $lastTime >= $task['interval']) { echo "Ejecutando tarea: {$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 []; }}
// Uso$scheduler = new TaskScheduler();
$scheduler->addTask('send_newsletter', function() { // Lógica de envío de boletín echo "Boletín enviado";}, 3600); // Cada hora
$scheduler->addTask('clean_cache', function() { // Limpieza de caché array_map('unlink', glob('cache/*.cache')); echo "Caché limpiado";}, 86400); // Una vez al día
$scheduler->run();?>3. Planificador avanzado con soporte para expresiones CRON
Para una gestión más flexible del horario, se puede implementar soporte para expresiones cron clásicas (minuto, hora, día, mes, día de la semana).
Ejemplo de analizador de expresiones cron:
<?phpclass CronPar También en la biblioteca
KSP Kotlin: Guía completa de Kotlin Symbol Processing con ejemplos
Configuración de aplicaciones TypeScript: bibliotecas y herramientas
Pruebas en TypeScript con Vitest
Trabajo con XML en PHP: análisis, creación y procesamiento de datos