मैं दो कारणों के लिए Error fetching http headers
हो रही किया गया है:
- सर्वर लंबे समय के जवाब देने के लिए समय लगता है।
- सर्वर
Keep-Alive
कनेक्शन (जो मेरा उत्तर कवर) का समर्थन नहीं करता है।
PHP हमेशा Connection: Keep-Alive
HTTP शीर्षलेख भेजकर वेब सेवा के लगातार कनेक्शन का उपयोग करने का प्रयास करेगा। यदि सर्वर हमेशा कनेक्शन बंद कर देता है और ऐसा नहीं किया है (PHP को EOF
प्राप्त नहीं हुआ है), तो आप Error fetching http headers
प्राप्त कर सकते हैं जब PHP सर्वर कनेक्शन पर पहले से बंद कनेक्शन का पुन: उपयोग करने का प्रयास करता है।
नोट: इस परिदृश्य ही होगा एक ही SoapClient
वस्तु एक से अधिक अनुरोध भेजता है और एक उच्च आवृत्ति के साथ है। पहले अनुरोध के साथ Connection: close
HTTP शीर्षलेख भेजना यह तय करेगा।
PHP संस्करण 5.3.5 (वर्तमान में उबंटू के साथ वितरित) में HTTP शीर्षलेख Connection: Close
सेट करने के लिए SoapClient द्वारा समर्थित नहीं है। एक एक धारा संदर्भ में HTTP शीर्ष लेख में भेजने के लिए सक्षम होना चाहिए ($option
का उपयोग कर - SoapClient
को तर्क के रूप में कुंजी stream_context
), लेकिन SoapClient
does not support changing the Connection header (अद्यतन: इस बग PHP संस्करण 5.3.11 में हल था)।
एक अन्य समाधान implement your own __doRequest()
पर है। दिए गए लिंक पर, अनुरोध भेजने के लिए एक लड़का Curl
का उपयोग करता है। यह आपके PHP अनुप्रयोग को Curl
पर निर्भर करेगा। कार्यान्वयन में बचत अनुरोध/प्रतिक्रिया शीर्षलेख जैसी कार्यक्षमता भी अनुपलब्ध है।
एक तीसरा समाधान प्रतिक्रिया प्राप्त होने के तुरंत बाद कनेक्शन को बंद करना है। यह __doRequest()
, __call()
या __soapCall()
में SoapClients विशेषता httpsocket
NULL
सेट करके किया जा सकता है। __call()
साथ उदाहरण:
class MySoapClient extends SoapClient {
function __call ($function_name , $arguments) {
$response = parent::__call ($function_name , $arguments);
$this->httpsocket = NULL;
return $response;
}
}
और आप इसे ठीक करते हैं? मैं टाइमआउट बढ़ाने की कोशिश कर रहा हूं, लेकिन यह मदद नहीं करता है :(धन्यवाद – Dmitriy
यह वास्तव में प्रश्न का उत्तर नहीं देता है। – Jeff