2013-10-09 7 views
8

curl सर्वर से प्रतिक्रिया प्राप्त करने में 30 सेकंड से अधिक समय लेता है तो PHP एक घातक त्रुटि फेंक देता है। ऐसा लगता है कि मेरे वेब ऐप में बहुत कुछ हो रहा है, खासकर यदि अन्य सर्वर व्यस्त है। यह वास्तव में उपयोगकर्ता को देखने के लिए सुंदर नहीं है।curl timeout, क्या आप इसे सुंदर ढंग से संभाल सकते हैं?

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

मुझे सच में नहीं पता कि क्यों curl ईमानदार होने के लिए चेतावनी के लिए चेतावनी के बजाय घातक त्रुटि फेंक देगा। यह एक असली दर्द है।

उत्तर

5

इन पैरामीटर

curl_setopt($ch, CURLOPT_CONNECTTIMEOUT ,0); 
curl_setopt($ch, CURLOPT_TIMEOUT, 500); 

का उपयोग कर आप 30 सेकंड के उल्लेख के बाद से cURL टाइमआउट बढ़ाएँ, मैं कि अपने PHP स्क्रिप्ट टाइमआउट निकलता जा रहा है संदेह है। तो इसे अपने PHP कोड में जोड़ें।

set_time_limit(0);// 0 is infite limit 
+0

आह इसके लिए धन्यवाद। PHP के लिए काफी नया होने के नाते मुझे पता नहीं था कि यह PHP था जो स्क्रिप्ट के निष्पादन के लिए अधिकतम 30 सेकंड की अनुमति देता था। मैंने सोचा कि घातक त्रुटि कर्ल द्वारा फेंक दी जा रही थी। इसके लिए धन्यवाद, यह मदद करता है लेकिन वास्तव में वह समाधान नहीं है जिसकी मैं उम्मीद कर रहा था। – Juicy

+1

निश्चित रूप से, विकास के दौरान समय-समय पर अनंतता में वृद्धि करें, लेकिन यह उत्पादन के लिए एक भयानक विचार है। – coderama

+0

यह उत्तर आपको यह नहीं बताता कि त्रुटि को कैसे पकड़ें (जो मैं ढूंढ रहा हूं), यह आपको बताता है कि त्रुटि से कैसे बचें। क्या उस सेटिंग का उपयोग किए बिना curl_exec के लिए समय सीमित करना भी संभव है? – cesoid

4

यह प्रश्न का थोड़ा और शाब्दिक उत्तर है। यही है, कर्ल अभी भी 30 सेकंड के बाद बंद हो जाएगा, लेकिन आप त्रुटि पकड़ सकते हैं और यदि आप चाहें तो जारी रख सकते हैं।

ini_set('max_execution_time', 40); // prevents 30 seconds from being fatal 

$ch = curl_init(); 

curl_setopt($ch, CURLOPT_TIMEOUT, 30); // curl timeout remains at 30 seconds 
curl_setopt($ch, CURLOPT_URL, "http://www.example.com/"); 
curl_exec($ch); 

if ($error_number = curl_errno($ch)) { 
    if (in_array($error_number, array(CURLE_OPERATION_TIMEDOUT, CURLE_OPERATION_TIMEOUTED))) { 
     print "curl timed out"; 
    } 
} 

curl_close($ch); 

यदि आपके पास max_execution_time पर कोई नियंत्रण नहीं है, तो आप कर्ल टाइमआउट को थोड़ा कम कर सकते हैं।

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