مجدول مهام PHP: دليل كامل لمهام cron و Task Scheduler

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

مجدول مهام PHP: دليل كامل



مجدول المهام (Task Scheduler) هو أداة بالغة الأهمية لأي تطبيق ويب يعمل على PHP. فهو يتيح أتمتة تنفيذ العمليات الروتينية: إرسال النشرات البريدية، تنظيف ذاكرة التخزين المؤقت، إنشاء التقارير، مزامنة البيانات مع واجهات API الخارجية، وغيرها الكثير. على عكس التشغيل اليدوي للنصوص البرمجية، يضمن المجدول تنفيذ المهام في الوقت المحدد وبشكل موثوق دون تدخل المسؤول.



الأساليب الأساسية لتنفيذ المجدول في PHP



هناك طريقتان رئيسيتان لتنفيذ مجدول المهام في مشاريع PHP:



  • نظام cron (Linux/Unix) — استخدام البرنامج الخفي cron المدمج لاستدعاء نصوص PHP البرمجية وفق جدول زمني.
  • مجدول مخصص (Task Scheduler) — تنفيذ منطق الجدولة مباشرة في كود PHP باستخدام الحلقات والتحقق من الوقت.


1. نظام cron مع PHP



النهج الأكثر شيوعاً وكفاءة. تقوم بإنشاء نص PHP برمجي ينفذ الإجراءات المطلوبة، ثم تضيف إدخالاً في crontab الخادم.



مثال على نص PHP برمجي لـ cron (cron_job.php):



<?php// cron_job.php - ينظف الجلسات القديمةrequire_once 'config.php';require_once 'db.php';

$stmt = $pdo->prepare("DELETE FROM sessions WHERE last_activity < NOW() - INTERVAL 1 DAY");$stmt->execute();

// تسجيل التنفيذfile_put_contents('logs/cron.log', date('Y-m-d H:i:s') . " - تم تنظيف الجلسات", FILE_APPEND);?>


إدخال في crontab (التنفيذ كل ساعة):



0 * * * * /usr/bin/php /var/www/html/cron_job.php


2. مجدول Task Scheduler مخصص في PHP



إذا لم يكن لديك وصول إلى نظام cron (مثلاً على استضافة مشتركة)، يمكنك تنفيذ مجدول مباشرة في PHP. يتم استخدام نص برمجي خاص يتم تشغيله مع كل زيارة للموقع أو عبر طلب HTTP.



مثال على مجدول بسيط (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 // بالثواني ]; }

public function run() { $lastRun = $this->getLastRunTimes();

foreach ($this->tasks as $task) { $lastTime = $lastRun[$task['name']] ?? 0; if (time() - $lastTime >= $task['interval']) { echo "جارٍ تنفيذ المهمة: {$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 []; }}

// الاستخدام$scheduler = new TaskScheduler();

$scheduler->addTask('send_newsletter', function() { // منطق إرسال النشرة echo "تم إرسال النشرة";}, 3600); // كل ساعة

$scheduler->addTask('clean_cache', function() { // تنظيف ذاكرة التخزين المؤقت array_map('unlink', glob('cache/*.cache')); echo "تم تنظيف ذاكرة التخزين المؤقت";}, 86400); // مرة يومياً

$scheduler->run();?>


3. مجدول متقدم مع دعم تعبيرات CRON



لإدارة أكثر مرونة للجدول الزمني، يمكن تنفيذ دعم تعبيرات cron الكلاسيكية (دقيقة، ساعة، يوم، شهر، يوم الأسبوع).



مثال على محلل تعبيرات cron:



<?phpclass CronPar                    

توصيات