2011-09-05 11 views
5

क्या PHP कोड को भेजता है क्योंकि यह फ़ाइल को संसाधित करता है, या क्या यह संपूर्ण HTML प्रतिक्रिया लिखता है और फिर इसे भेजता है? उदाहरण के लिए क्या यह सर्वर पर फ़ाइल फ़ूटर में महंगा PHP फ़ंक्शंस को स्थानांतरित करने में कोई फर्क पड़ता है?क्या इससे कोई फर्क पड़ता है कि PHP कोड हेडर या फ़ूटर में है या नहीं?

इसके अलावा, यदि आप Transfer-Encoding: chunked का उपयोग कर रहे थे तो इससे कोई फर्क पड़ता है?

उत्तर

3

आखिरकार, यह निर्भर करता है। मेरे द्वारा उपयोग किए जाने वाले अधिकांश PHP होस्टिंग तंत्र, स्क्रिप्ट से प्रतिक्रिया प्राप्त करेंगे, क्योंकि यह Content-Length शीर्षलेख को पूरी तरह से छोड़कर (क्योंकि यह पहले से ज्ञात नहीं है)। आप सर्वर को अब तक बफर किए गए सर्वर को प्रेषित करने के लिए मजबूर करने के लिए समय-समय पर flush() का उपयोग करके प्रतिक्रिया को फ्लश कर सकते हैं।

तो, यदि आप ऐसी चीजें करने जा रहे हैं जो बहुत समय लेते हैं और पृष्ठ को अग्रिम रूप से प्रस्तुत करने की अनुमति देना चाहते हैं, तो ऐसा करने का उचित तरीका जितना संभव हो उतना पृष्ठ आउटपुट करना होगा, कॉल करें flush(), और फिर अपने महंगे कार्यों को करें। बस सुनिश्चित करें कि घोषित अधिकतम PHP स्क्रिप्ट अवधि से अधिक समय न लेना।


ठीक है, तो यह है कि स्पष्टीकरण बेशक थोड़ा oversimplified है:

Content-Length हैडर वास्तव में कुछ परिस्थितियों में भेजा जा सकता है। उदाहरण के लिए, यदि स्क्रिप्ट की प्रतिक्रिया भेजी गई डेटा के लिए PHP के बफर से कम है, और/या यदि स्क्रिप्ट निष्पादित करने के लिए निश्चित समय के भीतर होती है, तो सर्वर को पता चलेगा कि सामग्री कितनी देर तक है और लंबाई हेडर जोड़ सकती है।

आगे, flush()वास्तव में कुछ भी नहीं कर सकता। यह आपके सर्वर विन्यास और अन्य कारकों पर निर्भर करता है। विशेष रूप से ध्यान दें सर्वर साइड व्यवहार के बारे में दस्तावेज में इन चेतावनियों:

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

कई सर्वर, विशेष रूप से Win32 पर, तब भी आपके स्क्रिप्ट से आउटपुट बफर करेंगे जब तक कि यह परिणाम ब्राउज़र को नतीजे देने से पहले समाप्त हो जाए।

अपाचे के लिए सर्वर मॉड्यूल जैसे mod_gzip स्वयं के बफरिंग कर सकते हैं जो फ्लश() को क्लाइंट को तुरंत भेजे जाने वाले डेटा का परिणाम नहीं देगा।

दूसरे शब्दों में: परीक्षण, परीक्षण, परीक्षण। सुनिश्चित करें कि वेब सर्वर उस व्यवहार के साथ हस्तक्षेप नहीं कर रहा है जिसे आप प्राप्त करने का प्रयास कर रहे हैं। यदि आवश्यक हो तो वेब सर्वर को पुन: कॉन्फ़िगर करें।

+0

ग्रेट उत्तर, धन्यवाद! –

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

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