PHP कार्य शेड्यूलर: cron‑expression लाइब्रेरी
PHP में वेब एप्लिकेशन विकसित करते समय, अक्सर शेड्यूल के अनुसार कुछ क्रियाएं करने की आवश्यकता होती है: सूचनाएं भेजना, कैश साफ़ करना, रिपोर्ट तैयार करना या डेटा सिंक्रोनाइज़ करना। Linux में बिल्ट-इन cron एक शक्तिशाली उपकरण है, लेकिन इसकी सेटिंग के लिए सर्वर तक पहुंच की आवश्यकता होती है और यह PHP कोड के अंदर डायनामिक शेड्यूलिंग के लिए हमेशा सुविधाजनक नहीं होता है। cron‑expression लाइब्रेरी इस समस्या का समाधान करती है - यह PHP में सीधे CRON-एक्सप्रेशन के आधार पर कार्यों के निष्पादन समय को पार्स, जांच और गणना करने की अनुमति देती है।
इस लेख में, हम समझेंगे कि cron‑expression लाइब्रेरी को कैसे स्थापित और उपयोग करें, एक सरल कार्य शेड्यूलर लिखेंगे और वास्तविक परिदृश्यों के साथ उदाहरण देखेंगे।
cron‑expression क्या है?
cron‑expression CRON-एक्सप्रेशन के साथ काम करने के लिए एक PHP-लाइब्रेरी है। 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स्थापना के बाद, अपने PHP स्क्रिप्ट में Composer ऑटोलोडर शामिल करें:
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