مجدول المهام بلغة PHP: مكتبة cron‑expression
عند تطوير تطبيقات الويب بلغة PHP، غالبًا ما تنشأ الحاجة لتنفيذ إجراءات معينة وفقًا لجدول زمني: إرسال الإشعارات، تنظيف ذاكرة التخزين المؤقت، إنشاء التقارير أو مزامنة البيانات. أداة cron المدمجة في Linux هي أداة قوية، لكن إعدادها يتطلب الوصول إلى الخادم وليست دائمًا ملائمة للجدولة الديناميكية داخل كود PHP. مكتبة cron‑expression تحل هذه المشكلة - فهي تتيح تحليل والتحقق وحساب أوقات تنفيذ المهام بناءً على تعبيرات CRON مباشرة في PHP.
في هذه المقالة، سنشرح كيفية تثبيت واستخدام مكتبة cron‑expression، وسنكتب مجدول مهام بسيط، ونستعرض أمثلة مع سيناريوهات حقيقية.
ما هو cron‑expression؟
cron‑expression هي مكتبة PHP للعمل مع تعبيرات CRON. تعبير CRON هو سلسلة نصية تتكون من خمسة حقول، مفصولة بمسافات:
* * * * *| | | | || | | | +---- يوم الأسبوع (0–7) (الأحد = 0 أو 7)| | | +------ الشهر (1–12)| | +-------- يوم الشهر (1–31)| +---------- الساعة (0–23)+------------ الدقيقة (0–59)على سبيل المثال، التعبير 30 4 * * 1-5 يعني: "كل أيام الأسبوع في الساعة 4:30 صباحًا". تتيح المكتبة:
- التحقق مما إذا كان الوقت الحالي يتطابق مع التعبير المحدد.
- الحصول على تاريخ التنفيذ التالي للمهمة.
- حساب تاريخ التنفيذ السابق.
- العمل مع النطاقات والخطوات وقوائم القيم.
التثبيت
يتم التثبيت عبر Composer. افتح الطرفية في جذر مشروعك ونفذ:
composer require mtdowling/cron-expressionبعد التثبيت، قم بتضمين أداة التحميل التلقائي لـ Composer في سكريبت PHP الخاص بك:
require 'vendor/autoload.php';الإمكانيات الأساسية والأمثلة
1. التحقق من الوقت الحالي
لنفترض أننا نريد تنفيذ مهمة كل 15 دقيقة. تعبير CRON: */15 * * * *. لننشئ كائنًا ونتحقق مما إذا كانت المهمة بحاجة للتنفيذ الآن:
<?phpuse Cron\\CronExpression;
$expression = CronExpression::factory('*/15 * * * *');if ($expression->isDue()) { echo "يجب تنفيذ المهمة الآن!";} else { echo "لم يحن الوقت بعد.";}?>الطريقة isDue() تتحقق مما إذا كان الوقت الحالي يتطابق مع التعبير. افتراضيًا، يتم استخدام المنطقة الزمنية للخادم.
2. الحصول على تاريخ التنفيذ التالي
أحيانًا نحتاج لمعرفة متى سيتم تشغيل المهمة مسبقًا:
<?phpuse Cron\\CronExpression;
$expression = CronExpression::factory('0 6 * * 1-5'); // كل يوم عمل في الساعة 6:00$nextRun = $expression->getNextRunDate();echo "التشغيل التالي: " . $nextRun->format('Y-m-d H:i:s');?>النتيجة: التشغيل التالي: 2025-03-10 06:00:00 (إذا كان اليوم الجمعة، فاليوم التالي هو الاثنين).
3. تاريخ التنفيذ السابق
الطريقة getPreviousRunDate() تعيد آخر لحظة تم فيها استيفاء الشرط:
<?php$prevRun = $expression->getPreviousRunDate();echo "التشغيل السابق: " . $prevRun->format('Y-m-d H:i:s');?>4. العمل مع المناطق الزمنية
افتراضيًا، يتم استخدام المنطقة الزمنية للخادم، لكن يمكنك تعيين منطقتك الخاصة:
<?php$expression = CronExpression::factory('0 9 * * *');$expression->setTimezone(new DateTimeZone('Europe/Moscow'));if ($expression->isDue()) { echo "في موسكو الآن الساعة 9:00 - حان وقت العمل!";}?>إنشاء مجدول مهام بسيط
الآن لنجمع كل شيء معًا ونكتب فئة صغيرة تنفذ المهام وفقًا لجدول زمني. لنفترض أن لدينا قائمة مهام مع تعبيرات CRON واستدعاءات.
<?phpclass أيضاً في المكتبة
المصادقة والتحقق من الهوية في C++: المكتبات والأمثلة والتطبيق
مكتبة resty في Go: دليل شامل مع أمثلة عملية
إرسال البريد الإلكتروني باستخدام C# (.NET): مكتبة System.Net.Mail
إرسال البريد الإلكتروني باستخدام JavaScript (Node.js): Nodemailer، SendGrid، Mailgun
تحديد المواقع والخرائط في PHP: نظرة عامة على المكتبات والأدوات