2010-08-08 18 views
20

सवाल एक तरह से यह सब कहते हैं - वहाँ एक समारोह जो जावास्क्रिप्ट समारोह setTimeout()पीएचपी के लिए के रूप में ही करता है? मैंने php.net खोजा है, और मुझे कोई भी प्रतीत नहीं होता है ...क्या PHP के लिए setTimeout() (जावास्क्रिप्ट) के समान कोई फ़ंक्शन है?

+0

@KennyTM जाना चाहता हूँ की अनुमति देते हैं - यह क्यों फर्क पड़ता है ...? – Alexander

+1

@TheLife ताकि लोगों को ओपी की समस्या के लिए एक वास्तविक समाधान मिल सके? :) –

उत्तर

8

वर्तमान स्क्रिप्ट में कोड के हिस्से को निष्पादित करने में कोई देरी नहीं है। यह बहुत समझ में नहीं आता है, या तो, एक PHP स्क्रिप्ट की प्रसंस्करण पूरी तरह से सर्वर की तरफ होती है और आप स्क्रिप्ट के समग्र निष्पादन में देरी करेंगे। sleep() है लेकिन यह निश्चित रूप से एक निश्चित समय के लिए प्रक्रिया को रोक देगा।

आप निश्चित रूप से क्रॉन नौकरियों और इसी तरह के उपयोग से एक विशिष्ट समय पर चलाने के लिए एक PHP स्क्रिप्ट शेड्यूल कर सकते हैं।

+0

यह समझाने में थोड़ा मुश्किल है - मैं जो चाहता था वह वास्तव में स्क्रिप्ट को रोकना था :) असल में मैं जो करना चाहता हूं वह है मेरे दोस्तों में से एक "शरारत" करना। मैंने एक इनपुट बनाया है जहां आप अपना नाम टाइप करते हैं और जब आप चैट रूम सबमिट करते हैं तो अनुकरण किया जाता है और इसे और अधिक यथार्थवादी बनाने के लिए मैं अजनबी के संदेश चाहता हूं, मेरा दोस्त "बात कर रहा है", यदि आप जानते हैं तो एक-एक करके प्रकट होता है मेरा मतलब क्या है :) – Latze

+6

समय की घटनाओं को समझ में नहीं आता क्योंकि स्क्रिप्ट सर्वर की तरफ चलती है? मैं तर्क का पालन नहीं कर रहा हूँ। निश्चित रूप से वे समेकन की अनुपस्थिति के कारण PHP में कम उपयोगी होते हैं, लेकिन एक ऐसी स्क्रिप्ट रखने में मूल्य होता है जो विशिष्ट समय के बाद या किसी निश्चित पल के बाद कुछ करता है। – Artefacto

+2

@Latze जो कुछ ऐसा लगता है जो आप क्लाइंट साइड पर जावास्क्रिप्ट का उपयोग करना चाहते हैं, है ना? –

9

sleep फ़ंक्शन है, जो निर्धारित समय के लिए स्क्रिप्ट को रोकता है।

usleep, time_nanosleep और time_sleep_until देखें।

+0

php में इस तरह के कोड को अनुकरण करना अभी भी अच्छा होगा: http://hastebin.com/rujakezuco.lisp। नींद अवरुद्ध है, टाइमआउट नहीं हैं। – Dmitry

10

PHP घटना संचालित नहीं है, इसलिए एक सेटटाइमआउट अधिक समझ में नहीं आता है। आप निश्चित रूप से इसकी नकल कर सकते हैं और वास्तव में, किसी ने Timer class लिखा है जिसका आप उपयोग कर सकते हैं। लेकिन PHP में सर्वर की ओर से प्रोग्रामिंग शुरू करने से पहले मैं सावधान रहूंगा।

+1

लेकिन PHP में आपके विशिष्ट स्क्रिप्ट को ईवेंट संचालित करने के लिए टूल हैं। उदाहरण के लिए कंसोल के माध्यम से php चलाना आप अलग-अलग घटनाओं को अलग-अलग समय पर शेड्यूल करना चाहते हैं, इस बिंदु पर यह टाइमआउट रखने के लिए सही समझ में आता है। – Dmitry

2

जब तक आप AJAX का उपयोग live अनुरोधों के लिए नहीं कर रहे थे, तो PHP इस समस्या के लिए पसंदीदा भाषा नहीं होगी। PHP स्क्रिप्ट hang नहीं है और एक और प्रतिक्रिया के लिए प्रतीक्षा करें। वे लगातार नहीं हैं। जावास्क्रिप्ट की आवश्यकता होगी।

यहां तक ​​कि एक शरारत के लिए, एक जावास्क्रिप्ट AJAX फ़ंक्शन इनपुट को पार्स करने के लिए एक PHP स्क्रिप्ट के साथ जोड़ा गया है और तदनुसार जवाब देना आपको वही होगा जो आपको चाहिए। इसे और अधिक यथार्थवादी बनाने के लिए आप इसे sleep फ़ंक्शन में php में भी जोड़ सकते हैं। इसके अलावा, मैं सर्वर के विश्लेषण के लिए अलग-अलग बयानों का एक समूह तैयार करूंगा, आप प्रत्येक कथन के लिए आवश्यक sleep समय निर्धारित करने के लिए जा सकते हैं।

MySQL डेटाबेस उदाहरण: उदाहरण के लिए:

| ID | SLEEP | STATEMENT             | 
| 1 | 3 | Hello              | 
| 2 | 10 | I have been alright, nothing new.       | 
| 3 | 20 | This is a really long message that takes 20 seconds to type | 

तो आप इसे इस रूप में पार्स सकता है:

$query = mysql_query("SELECT * FROM `responses` WHERE `id`='3'"); 
$array = mysql_fetch_array($query); 
sleep((int)$array['sleep']); //convert sleep time to integer, sleep. 
die($array['statement']);  //print the statement back to AJAX function 
1

अगर आप यह कर सकते हैं आप कुछ php कोड निष्पादित करने के बाद एक कार्रवाई करने की जरूरत है एक गूंज

echo "Success.... <script>setTimeout(function(){alert('Hello')}, 3000);</script>"; 

तो ग्राहक (ब्राउज़र) में एक समय के बाद आप कुछ और कर सकते हैं, जैसे उदाहरण के लिए किसी अन्य php स्क्रिप्ट पर रीडायरेक्ट करें या एक चेतावनी गूंजें

1

http://php.net/manual/en/class.evtimer.php शायद आप जो खोज रहे हैं, आप सेट अंतराल के दौरान नामक फ़ंक्शन कर सकते हैं, जावास्क्रिप्ट में setInterval के समान। यह एक pecl एक्सटेंशन है, यदि आपके पास whm/cpanel है तो आप इसे आसानी से pecl सॉफ़्टवेयर/एक्सटेंशन इंस्टॉलर पृष्ठ के माध्यम से इंस्टॉल कर सकते हैं।

मैंने यह नहीं देखा था कि यह प्रश्न 2010 से है और 2012-2013 में उत्तराधिकारी वर्ग को कोडिंग करना शुरू हो गया था।इसलिए पुराने प्रश्न के अपडेट के रूप में, अब एक वर्ग है जो इसे जावास्क्रिप्ट सेटटाउटआउट/सेटिनटरवाल के समान कर सकता है।

6
कुछ बातें मैं PHP में टाइमर के बारे में नोट करने के लिए करना चाहते हैं

: PHP में

1) टाइमर भावना जब लंबे समय से चल लिपियों में इस्तेमाल (डेमॉन बनाने के लिए और, हो सकता है, CLI लिपियों में)। तो यदि आप उस तरह के एप्लिकेशन को विकसित नहीं कर रहे हैं, तो आपको टाइमर की आवश्यकता नहीं है।

2) टाइमर अवरुद्ध और गैर-अवरुद्ध हो सकते हैं। यदि आप sleep() का उपयोग कर रहे हैं, तो यह एक अवरोधक टाइमर है, क्योंकि आपकी स्क्रिप्ट केवल निर्दिष्ट समय के लिए जमा हो जाती है। टाइमर अवरुद्ध करने वाले कई कार्यों के लिए ठीक है। उदाहरण के लिए, हर 10 सेकंड में आंकड़े भेजना। यह स्क्रिप्ट ब्लॉक करने के लिए ठीक है:

while (true) { 
    sendStat(); 
    sleep(10); 
} 

3) गैर अवरुद्ध टाइमर केवल कार्यक्रम चालित क्षुधा, WebSocket-सर्वर की तरह में समझ बनाने के। ऐसे अनुप्रयोगों में किसी भी समय एक घटना हो सकती है (जैसे आने वाले कनेक्शन), इसलिए आपको अपने ऐप को sleep() (स्पष्ट रूप से) से अवरुद्ध नहीं करना चाहिए। इस प्रयोजनों के लिए इवेंट-लूप लाइब्रेरीज़ हैं, जैसे reactphp/event-loop, जो आपको गैर-अवरुद्ध फैशन में कई धाराओं को संभालने की अनुमति देता है और इसमें टाइमर/अंतराल सुविधा भी होती है।

4) PHP में गैर-अवरुद्ध टाइमआउट संभव है। इसे टाइमआउट पैरामीटर के साथ stream_select() फ़ंक्शन के माध्यम से कार्यान्वित किया जा सकता है (देखें कि यह reactphp/event-loop StreamSelectLoop::run() में कैसे कार्यान्वित किया गया है)।

5) पीएचपी एक्सटेंशन की तरह कर रहे हैं libevent, libev, event जो टाइमर कार्यान्वयन (यदि आप कट्टर)