2012-11-24 22 views
6

मेरे पास एक PHP स्क्रिप्ट "ए" है जो एक और PHP स्क्रिप्ट "बी" शुरू करती है, जो 5 घंटे तक चलता है। मैं इसके लिए कर्ल फ़ंक्शन का उपयोग करता हूं। लेकिन मेरी समस्या यह है कि लिपि "ए" स्क्रिप्ट "बी" से कनेक्शन को सुनिश्चित नहीं करता है। मैंने max_execution_time, टाइमआउट, सॉकेट-टाइमआउट, आदि बदल दिया है ... लेकिन कुछ भी मदद नहीं करता है।कनेक्शन रखने-जीवित समस्याएं

क्या मुझे कर्ल "बी" में कर्ल या कुछ के साथ हेडर भेजने की आवश्यकता है?

$curl_header[] = "Accept: text/xml,application/xml,application/xhtml+xml,text 
/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5"; 
$curl_header[] = "Cache-Control: max-age=0"; 
$curl_header[] = "Connection: keep-alive"; 
$curl_header[] = "Keep-Alive: 84600"; 

$url = 'http://test.de/test_B.php'; 

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)'); 
curl_setopt($ch, CURLOPT_FRESH_CONNECT, true); 
curl_setopt($ch, CURLOPT_HTTPHEADER, $curl_header); 
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 300); 
curl_setopt($ch, CURLOPT_TIMEOUT, 84600); 
curl_setopt($ch, CURLOPT_NOSIGNAL, true); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_URL, $url); 
$result = curl_exec($ch); 
$curl_errno = curl_errno($ch); 
curl_close($ch); 

`

+1

कुछ कोड पेस्ट करें? – GBD

+0

क्या कॉलिंग php स्क्रिप्ट स्वयं टाइमआउट करता है? क्या आपने कॉलिंग विज्ञान पर max_execution समय 0 पर रखा है? इसके अलावा आपके पास कम ट्रांसफर दर सेट भी है - यदि आपको पार्ट प्रतिक्रिया (व्हाइटस्पेस समेत) मिलती है और फिर कुछ भी नहीं, तो CURLOPT_LOW_SPEED_TIME किक हो सकता है? – Robbie

उत्तर

1

स्क्रिप्ट 'बी' खत्म करने के लिए यह निष्पादन कुछ echo "something"; flush(); कि कनेक्शन जिंदा mantain दौरान डाल करने के लिए उपयोगी हो सकता है लंबा समय लगता है तो।

यह हाल ही में इसी तरह के निष्पादन पर मेरे साथ होता है।

0

स्क्रिप्ट बी अपने आउटपुट को कहीं और स्टोर करता है और फिर 5 घंटे कनेक्ट और चेक के बाद। HTTP सर्वर इन समय के लिए डिज़ाइन नहीं किए गए हैं, और आप किसी भी प्रकार के टाइमआउट में लग सकते हैं।

स्क्रिप्ट एक स्क्रिप्ट बी जो पृष्ठभूमि में खोल अनुरोध के माध्यम से स्क्रिप्ट सी चलाता है और कुछ identificator रिटर्न कॉल:

0

आप निम्न वास्तुकला इस्तेमाल कर सकते हैं। असल में, स्क्रिप्ट बी सिर्फ 5 घंटे की नौकरी शुरू करता है जो पृष्ठभूमि में काम करेगा और आपको कनेक्शन रखना नहीं है। आप डेटाबेस या कुछ फाइल में प्रगति को स्टोर कर सकते हैं।

फिर, स्क्रिप्ट ए कुछ गूंजने वाले इंटरफ़ेस को कॉल करके उस 5-घंटे की स्क्रिप्ट सी पर प्रगति के लिए कॉल कर सकता है, चलिए इसे स्क्रिप्ट डी कहते हैं, जो डेटाबेस या फ़ाइल को पढ़ेगा और पता लगाएगा कि स्क्रिप्ट सी इसके कार्यों के साथ कितनी दूर चली गई थी।