Planificador de tareas en PHP: biblioteca cron‑expression para horarios flexibles

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Planificador de tareas PHP: biblioteca cron‑expression



Al desarrollar aplicaciones web en PHP, a menudo surge la necesidad de ejecutar ciertas acciones según un horario: enviar notificaciones, limpiar la caché, generar informes o sincronizar datos. El cron integrado en Linux es una herramienta potente, pero su configuración requiere acceso al servidor y no siempre es conveniente para la planificación dinámica dentro del código PHP. La biblioteca cron‑expression resuelve este problema: permite analizar, verificar y calcular el tiempo de ejecución de tareas basadas en expresiones CRON directamente en PHP.



En este artículo, veremos cómo instalar y usar la biblioteca cron‑expression, escribiremos un planificador de tareas simple y exploraremos ejemplos con escenarios reales.



¿Qué es cron‑expression?



cron‑expression es una biblioteca PHP para trabajar con expresiones CRON. Una expresión CRON es una cadena que consta de cinco campos separados por espacios:



* * * * *| | | | || | | | +---- día de la semana (0–7) (domingo = 0 o 7)| | | +------ mes (1–12)| | +-------- día del mes (1–31)| +---------- hora (0–23)+------------ minuto (0–59)


Por ejemplo, la expresión 30 4 * * 1-5 significa: "cada día laborable a las 4:30 a. m.". La biblioteca permite:



  • Verificar si la hora actual coincide con la expresión dada.
  • Obtener la próxima fecha de ejecución de la tarea.
  • Calcular la fecha de ejecución anterior.
  • Trabajar con rangos, pasos y listas de valores.


Instalación



La instalación se realiza a través de Composer. Abra la terminal en la raíz de su proyecto y ejecute:



composer require mtdowling/cron-expression


Después de la instalación, incluya el cargador automático de Composer en su script PHP:



require 'vendor/autoload.php';


Funcionalidades principales y ejemplos



1. Verificación de la hora actual



Supongamos que queremos ejecutar una tarea cada 15 minutos. Expresión CRON: */15 * * * *. Creemos un objeto y verifiquemos si la tarea debe ejecutarse ahora mismo:



<?phpuse Cron\\CronExpression;

$expression = CronExpression::factory('*/15 * * * *');if ($expression->isDue()) { echo "¡La tarea debe ejecutarse ahora!";} else { echo "Aún no es el momento.";}?>


El método isDue() verifica si la hora actual coincide con la expresión. Por defecto, se usa la zona horaria del servidor.



2. Obtener la próxima fecha de ejecución



A veces es necesario saber de antemano cuándo se ejecutará una tarea:



<?phpuse Cron\\CronExpression;

$expression = CronExpression::factory('0 6 * * 1-5'); // cada día laborable a las 6:00$nextRun = $expression->getNextRunDate();echo "Próxima ejecución: " . $nextRun->format('Y-m-d H:i:s');?>


Resultado: Próxima ejecución: 2025-03-10 06:00:00 (si hoy es viernes, el próximo lunes).



3. Fecha de ejecución anterior



El método getPreviousRunDate() devuelve el último momento en que se cumplió la condición:



<?php$prevRun = $expression->getPreviousRunDate();echo "Ejecución anterior: " . $prevRun->format('Y-m-d H:i:s');?>


4. Trabajar con zonas horarias



Por defecto, se usa la zona horaria del servidor, pero puede establecer la suya propia:



<?php$expression = CronExpression::factory('0 9 * * *');$expression->setTimezone(new DateTimeZone('Europe/Madrid'));if ($expression->isDue()) {    echo "¡En Madrid ahora son las 9:00 — es hora de actuar!";}?>


Creación de un planificador de tareas simple



Ahora juntemos todo y escribamos una pequeña clase que ejecutará tareas según un horario. Supongamos que tenemos una lista de tareas con expresiones CRON y callbacks.



<?phpclass                    

Recommendations