<?php
while(true){
//code goes here.....
}
?>
मैं एक PHP वेब सर्वर बनाने जा रहा हूं, तो क्या यह स्क्रिप्ट कर्ल के साथ हमेशा के लिए चलती है?क्रॉन नौकरी के साथ हमेशा के लिए चलाने के लिए एक PHP स्क्रिप्ट बना सकते हैं?
<?php
while(true){
//code goes here.....
}
?>
मैं एक PHP वेब सर्वर बनाने जा रहा हूं, तो क्या यह स्क्रिप्ट कर्ल के साथ हमेशा के लिए चलती है?क्रॉन नौकरी के साथ हमेशा के लिए चलाने के लिए एक PHP स्क्रिप्ट बना सकते हैं?
अधिकतम निष्पादन समय को अनंत (0) पर सेट करना न भूलें।
बेहतरसुनिश्चित करें कि आप एक से अधिक उदाहरण समाप्त न हो, कि यदि आपका इरादा क्या है:
ignore_user_abort(true);//if caller closes the connection (if initiating with cURL from another PHP, this allows you to end the calling PHP script without ending this one)
set_time_limit(0);
$hLock=fopen(__FILE__.".lock", "w+");
if(!flock($hLock, LOCK_EX | LOCK_NB))
die("Already running. Exiting...");
while(true)
{
//avoid CPU exhaustion, adjust as necessary
usleep(2000);//0.002 seconds
}
flock($hLock, LOCK_UN);
fclose($hLock);
unlink(__FILE__.".lock");
CLI मोड में है, तो बस फ़ाइल को चलाने के।
एक वेबसर्वर पर एक और PHP में, आप एक जो (बजाय cURL का उपयोग कर, यह एक निर्भरता को नष्ट करने की) इस तरह infinetely चलाना चाहिए शुरू कर सकता है, तो:
$cx=stream_context_create(
array(
"http"=>array(
"timeout" => 1, //at least PHP 5.2.1
"ignore_errors" => true
)
)
);
@file_get_contents("http://localhost/infinite_loop.php", false, $cx);
या आप का उपयोग कर linux क्रॉन से शुरू कर सकता है इस तरह wget:
`* * * * * wget -O - http://localhost/infinite_loop.php`
या आप जो इस में शामिल है एक .bat फ़ाइल चल bitsadmin का उपयोग कर विंडोज समयबद्धक से शुरू कर सकता है:
bitsadmin /create infiniteloop
bitsadmin /addfile infiniteloop http://localhost/infinite_loop.php
bitsadmin /resume infiniteloop
फ़ाइल हैंडल का उपयोग कर अच्छी लॉकिंग तकनीक, अंगूठे ऊपर! –
उपरोक्त अप! ... –
ने यह सुनिश्चित करने के लिए ignore_user_abort जोड़ा है कि स्क्रिप्ट समाप्त नहीं होती है क्योंकि वेब वातावरण में कॉलर अनुरोध को त्याग देता है। –
डिफ़ॉल्ट रूप से, नहीं क्योंकि PHP में निष्पादन समय सीमा है। देखें: http://www.php.net/manual/en/info.configuration.php#ini.max-execution-time
आप इसे मान सेट या तो द्वारा हमेशा के लिए चलाने के लिए या अपनी स्क्रिप्ट में set_time_limit
फोन कर सकते हैं (http://php.net/manual/en/function.set-time-limit.php)।
लेकिन मैं इसकी अनुशंसा नहीं करता क्योंकि PHP (HTTP अनुरोध द्वारा बुलाया गया) को अनंत लूप रखने के लिए डिज़ाइन नहीं किया गया है। यदि आप कर सकते हैं, तो स्थानीय स्क्रिप्ट का उपयोग करें, या अक्सर कार्य करने के लिए अंतराल में पृष्ठ का अनुरोध करें।
यदि आपकी वेबसाइट अन्य लोगों द्वारा अक्सर ब्राउज़ की जाती है तो आप इसे इसके बजाय प्रत्येक पृष्ठ में कर सकते हैं।
(और कल्पना अगर कोई स्क्रिप्ट एक बार से अधिक अनुरोध करता है, आपके द्वारा चलाए जा इसके बारे में कई उदाहरण होगा)
आप ऐसा आप set_time_limit (0) अपनी स्क्रिप्ट में, इसे किसी और सेट केवल तभी कर सकते हैं max_execution_time कॉन्फ़िगरेशन में सेट के बाद निष्पादन रोक देगा।
और आप जबकि (सत्य) स्थिति का उपयोग कर रहे हैं, जो आपकी स्क्रिप्ट को हमेशा चलाने के लिए तैयार करेगा।
एक php कोड हमेशा के लिए चलाने के लिए के लिए, यह एफएफ .:
set_time_limit(0);
// तो php के रूप में सामान्य समाप्त नहीं करेंगे, तो आप सामान कर रही होगी कि अगर एक बहुत लंबे प्रसंस्करण ले जाएगा होना चाहिए समयsetInterval()
के लिए
setTimeout()
संपादित करें: लेकिन जब से तुम खंडिका हो जाएगा एक क्रॉन नौकरी में प्रवेश करना तो आप क्लाइंट-साइड हैंडलिंग से दूर रह सकते हैं।
संपादित करें: मेरा सुझाव, अनंत लूप का उपयोग नहीं करना है जब तक कि आपके पास कोई कोड न हो जो कुछ समय बाद लूप से बाहर निकलने के लिए कहता है। याद रखें, आप एक क्रॉन नौकरी का उपयोग कर एक ही पृष्ठ पर कॉल करेंगे, इसलिए लूप अनंत को रखने में कोई बात नहीं है। [संपादित करें] अन्यथा, आपको लॉकिंग सिस्टम की आवश्यकता होगी जैसा कि @ तिबेरियू-इओनुएट स्टैन द्वारा सुझाया गया है, इसलिए प्रत्येक बार क्रॉन नौकरी कहने पर केवल 1 उदाहरण चल सकता है।
आपको जो चाहिए वह 'सत्य (सत्य)' है, और हाँ यह तब तक चल रहा है जब तक कुछ घटित न हो (अधिमानतः आपके द्वारा निर्दिष्ट ब्रेकिंग स्थिति के कारण) – Adi
@AdnanShammout यह कुछ समय बाद स्वचालित रूप से समाप्त हो जाएगा। PHP में एक सेट अधिकतम निष्पादन समय अंतर्निहित है, जब तक कि आप अपने कोड में उस सेटिंग को संशोधित न करें। –
@DexterHuinda, PHP निष्पादन सीमा केवल वेब ब्राउज़र से चलते समय लागू होती है। कमांड 'php server.php' के रूप में चलते समय सीमा लागू नहीं होती है। किसी भी वेब ब्राउज़र से सर्वर हमेशा के लिए क्यों चलाना चाहते हैं? – Adi