2010-08-06 6 views
8

मेरे पास php स्क्रिप्ट्स हैं जो विभिन्न चीजों को करने के लिए पर्ल स्क्रिप्ट को कॉल करती हैं और कभी-कभी मुझे यह मिलता है कि यह प्रतिक्रिया प्राप्त किए बिना आगे बढ़ता है, यह चर पर आधारित है जो पर्ल स्क्रिप्ट में पास किया जा रहा है और मैं कर रहा हूं उत्तराधिकार में बहुत सारे लोग इसलिए मुझे वास्तव में इसे डीबग नहीं किया जा सकता है क्योंकि मुझे perl से प्रतिक्रिया नहीं है ...किसी विशिष्ट फ़ंक्शन/कोड के ब्लॉक (संपूर्ण स्क्रिप्ट नहीं) के लिए टाइमआउट सेट करें?

मैं वास्तव में केवल एक php फ़ंक्शन या ब्लॉक सेट करने में सक्षम होना चाहता हूं कुछ निश्चित सेकंड के बाद टाइमआउट पर कोड .. मैं इस पर खोज कर रहा हूं लेकिन इसे अभी तक कुछ भी नहीं मिला है,

मैं ऐसा सोच रहा था जैसे ऐसा काम कर सकता है लेकिन मुझे नहीं लगता कि यह होगा गतिशील रूप से $ टाइम वैरिएबल अपडेट करें, लेकिन हो सकता है कि थाई प्राप्त करने का कोई तरीका हो काम करने के लिए? किसी भी सलाह की सराहना की

$time = time(); 
$timeout = $time + 5; //just as an example 

do { 

// do stuff 
} while ($time < $timeout) 
+0

आप $$ के अंदर जबकि इसे अद्यतन करने के लिए, लेकिन यदि पर्ल कोड का आपका कॉल उस समय के अंदर है, तो यह काम नहीं करेगा अगर यह एक ऐसा कॉल है जो इसके उत्तर के लिए इंतजार कर रहा है। – Prix

+0

हाँ समस्या है, तो मुझे लगता है कि यह perl की वापसी के लिए इंतजार कर रहा है इससे कोई फर्क नहीं पड़ता कि – Rick

+0

क्या आपको वास्तव में रिटर्न की परवाह नहीं है, तो आप इसे अलग कर सकते हैं, जैसे आदेश: 'exec (" my_command_here>/dev/शून्य 2> &1 &"); 'जो पृष्ठभूमि पर आपके कोड को निष्पादित करेगा, आउटपुट को ब्लैक होल पर भेज देगा। इस प्रकार आपका PHP कोड चल रहा रहेगा लेकिन फिर आपको मौसम समाप्त होने के बारे में जानने के लिए एक अलग दृष्टिकोण की आवश्यकता होगी या नहीं ... आप कर सकते हैं उदाहरण के लिए अपनी perl फ़ाइल को पीआईडी ​​फ़ाइल की तरह 1 या 0 के साथ फ़ाइल बनाएं और आप इसे अपने लूप से नियंत्रित कर सकते हैं जैसे कि आप चाहते थे। – Prix

उत्तर

8

आपका सबसे अच्छा शर्त अपनी टाइमआउट राशि के लिए नींद proc_open उपयोग करते हैं, और फिर अगर प्रक्रिया अभी भी पूरा नहीं किया है फोन proc_terminate होगा।

proc_ * परिवार के विवरण के लिए http://us3.php.net/manual/en/book.exec.php देखें।

+0

मैं इसे देख लूंगा, हालांकि, मुझे पर्ल से वापस लौटने की ज़रूरत है, सिर्फ इस मामले में उचित समय के भीतर वापसी नहीं दे रहा है, मेरे पास इसे डीबग करने की वापसी नहीं है .. मैंने पहले proc_open के बारे में सुना था लेकिन मुझे यकीन नहीं था कि मुझे इससे वापसी मिल सकती है – Rick

0

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

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