2013-03-14 10 views
24

PHP में, मैं लूप के प्रत्येक पुनरावृत्ति पर कई दूसरी देरी डालना चाहता हूं।PHP नींद देरी

for ($i=0; $i <= 10; $i++) { 
    $file_exists=file_exists($location.$filename); 
    if($file_exists) { 
     break; 
    } 

    //sleep for 3 seconds 
} 

मैं यह कैसे कर सकता हूं?

+1

बस उत्सुक ... आप लूप में देरी क्यों करना चाहते हैं? – Baba

+2

मुझे शायद यह इंगित करना चाहिए कि एक लूप जो 3 सेकंड देरी के साथ 10 बार चलता है उसे निष्पादित करने में 30 सेकंड लगेंगे। यह आपके सर्वर को टाइमआउट पर प्राप्त कर सकता है, इसलिए अपनी कॉन्फ़िगरेशन जांचें और देखें कि क्या आप कुछ प्रोसेसिंग PHP के बाहर कर सकते हैं, यानी क्रॉन या कुछ के माध्यम से। – Husman

+3

@ हुसमैन: 11 बार, 10 बार नहीं। ;) –

उत्तर

42

उपयोग PHP sleep() कार्य करते हैं। http://php.net/manual/en/function.sleep.php यह सेकंड की दी गई संख्या के लिए अगले लूप का निष्पादन रोकता है। तो यह

for ($i=0; $i <= 10; $i++) { 
    $file_exists=file_exists($location.$filename); 
    if($file_exists) { 
     break; 
    } 
    sleep(3); // this should halt for 3 seconds for every loop 
} 
5

की तरह कुछ आप sleep(3) जो 3 सेकंड के लिए धागा सोता उपयोग कर सकते हैं।

सुधारphp are in seconds में नींद विधि।

+1

नींद के साथ नींद को भ्रमित करें() – rinchik

+3

यह 'नींद (3)' है, नींद नहीं (3000)। – Sliq

+2

'नींद (3000)' लगभग एक घंटे तक सो जाएगा! –

11

मैं देख रहा हूँ कि आप क्या कर रहे हैं ... अपने एक स्क्रिप्ट में देरी लगातार फाइल सिस्टम पर एक फ़ाइल (एक है कि अपलोड किया जा रहा या किसी अन्य लिपि मुझे लगता है द्वारा लिखा जा रहा) के लिए जाँच करने के लिए। यह करने का यह एक अच्छा तरीका है।

  1. आपकी स्क्रिप्ट धीमा चलेगा। यदि सर्वर कई स्क्रिप्ट चला रहे हैं तो सर्वर को चकित करना।
  2. आपका सर्वर कुछ उपयोगकर्ताओं के लिए समय-समय पर हो सकता है।
  3. एचडीडी एक्सेस एक महंगा संसाधन है।
  4. ऐसा करने के बेहतर तरीके हैं।

आप अजाक्स इस्तेमाल कर सकते हैं। और हर कुछ सेकंड में अपनी PHP स्क्रिप्ट को कॉल करने के लिए टाइमआउट का उपयोग करें। यह धीमी स्क्रिप्ट लोडिंग से बच जाएगा। और आप इसे लगातार जारी रख सकते हैं (लूप के लिए वर्तमान केवल 33 सेकंड के लिए चलाएगा और फिर रुक जाएगा)।

आप डेटाबेस का उपयोग कर सकते हैं। कुछ मामलों में डेटाबेस पहुंच एचडीडी एक्सेस से तेज है। विशेष रूप से विचार और कैशिंग के साथ। फ़ाइल बनाने/फ़ाइल अपलोड करने वाली स्क्रिप्ट किसी तालिका में एक ध्वज सेट कर सकती है (यानी file_exists) और फिर आपके पास एक स्क्रिप्ट हो सकती है जो आपके डेटाबेस में उस फ़ील्ड को जांचती है।

+0

क्या देरी समारोह नहीं लिखना बेहतर होगा और इसे 20 गुना अधिक लंबा चलाना होगा? – Yeak

+1

@Yevo No. एक लूप रन 20 बार एक सेकंड से भी कम समय में निष्पादित होगा। यह वास्तव में सीपीयू गति पर निर्भर करता है। मैं देरी उपयोगकर्ता समय (सेकंड) में चला जाएगा। – Husman

+0

इस तरह से कुछ के लिए AJAX के आधार पर बात यह है कि यह आसानी से circumvented है। क्लाइंट में चलने वाली किसी भी चीज पर भरोसा नहीं किया जा सकता है क्योंकि मैं इसे सीधे बंद कर सकता हूं या सीधे http आदेश भेजने के लिए कर्ल जैसे टूल का उपयोग कर सकता हूं – GordonM

0

आप supervisorD का उपयोग कर एक PHP Daemon स्क्रिप्ट का उपयोग माना जाता है। मैं इसे कई कार्यों में उपयोग करता हूं जो हर समय चलने की आवश्यकता होती है।

पकड़ सुनिश्चित करें कि हर बार जब आप अपनी स्क्रिप्ट चला रहे हैं आप स्मृति संसाधनों के लिए जाँच कर रही है। यदि यह बहुत अधिक है, तो प्रक्रिया को रोकें और फिर इसे फिर से शुरू करें।

मैंने प्रक्रियाओं के लिए प्रक्रियाओं के लिए हमेशा डेटाबेस रिकॉर्ड की जांच करने के लिए सफलतापूर्वक इस प्रक्रिया का उपयोग किया है।

यह अधिक हो सकता है लेकिन विचार करने लायक है।

0

हरे कुछ समय के लिए PHP स्क्रिप्ट को सोने के दो तरीके हैं। जब आपका कोड हो और कुछ समय के लिए काम कर रहे स्क्रिप्ट को रोकना चाहते हैं तो इन कार्यों का उपयोग करें। इन उदाहरणों में टी वह कोड का पहला भाग स्क्रिप्ट रन पर किया जाएगा और कोड का दूसरा भाग किया जाएगा लेकिन समय विलंब के साथ किया जाएगा।

  1. sleep() फ़ंक्शन का उपयोग करके आप सेकंड में नींद का समय परिभाषित कर सकते हैं।

उदाहरण:

echo "Message 1"; 
// The first part of code. 
$timeInSeconds = 3; 
sleep($timeInSeconds); 
// The second part of code. 
echo "Message 2"; 

इस तरह यह 3 सेकंड के लिए PHP स्क्रिप्ट सोने के लिए संभव है। इस फ़ंक्शन का उपयोग करके आप सेकंड की पूर्ण संख्या (पूर्णांक) के लिए स्क्रिप्ट सो सकते हैं।

  1. usleep() फ़ंक्शन का उपयोग करके आप माइक्रोसेकंड में नींद का समय परिभाषित कर सकते हैं। यह नींद का समय अंतराल के लिए सुविधाजनक है जिसके लिए एक सेकंड से अधिक सटीक समय की आवश्यकता होती है।

उदाहरण:

echo "Message 1"; 
// The first part of code. 
$timeInMicroSeconds = 2487147; 
usleep($timeInMicroSeconds); 
// The second part of code. 
echo "Message 2"; 

यदि आप दूसरा (नाव) की तुलना में छोटे समय मूल्यों के लिए php सोना चाहता हूँ इस सुविधा का उपयोग कर सकते हैं। इस उदाहरण में मैंने स्क्रिप्ट को 2.487147 सेकेंड के लिए सोया है।

संबंधित मुद्दे