مجدول مهام 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.php2. مجدول 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 أيضاً في المكتبة
أفضل مكتبات التسجيل (Logging) للغة Go (Golang): نظرة عامة ومقارنة
ModelMapper في Java: دليل شامل مع أمثلة عملية
اختبار في Swift (iOS/macOS): الأطر والأدوات
التعلم الآلي باستخدام Kotlin: نظرة عامة على مكتبات KMath وSmile وKotlinDL وDeepLearning4J
العمل مع التواريخ في C# (.NET): نظرة عامة على المكتبات والأدوات المدمجة