मैं एक PHP स्क्रिप्ट पर काम कर रहा हूं जो अग्रिम लंबाई को जानने के बिना फ्लाई पर बड़े (बहु-एमबी) आउटपुट उत्पन्न करता है। मैं सीधे php://output
पर fwrite()
के माध्यम से लिख रहा हूं और मानक आउटपुट और Transfer-Encoding: chunked
(आवश्यकतानुसार भाग को एन्कोड करना) का उपयोग करने की कोशिश की है, लेकिन इससे कोई फर्क नहीं पड़ता कि ब्राउज़र डाउनलोड करने का प्रयास करता है जब तक कि डाउनलोड संवाद प्रदर्शित करने से पहले सभी डेटा लिखे जाएं। मैंने हेडर के बाद और प्रत्येक खंड के बाद flush()
आईएनजी भी कोशिश की है लेकिन इससे कोई फर्क नहीं पड़ता है।अपाचे/PHP आउटपुट कैशिंग
मुझे लगता है कि अपाचे आउटपुट को कैशिंग कर रहा है क्योंकि ब्राउज़र सामान्य रूप से सर्वर से कुछ केबी प्राप्त करने के बाद प्रदर्शित होता है।
क्या किसी के पास इस कैशिंग को रोकने और ब्राउजर को डेटा को फ्लैश करने के बारे में कोई विचार है?
धन्यवाद, जम्मू
अनुमान लगाने के बजाय कि पूरी सामग्री उत्पन्न होने तक अपाचे फ्लश नहीं कर रहा है, मैं सुझाव देता हूं कि वायरसहार्क या इसी तरह के टूल्स का उपयोग _see_ ब्राउज़र पर कौन सा डेटा भेजा जा रहा है। यदि आपको चीजों को धीमा करने की आवश्यकता है तो कुछ 'नींद (1)' कॉल डालें। (मुझे संदेह है कि अपाचे अपने बफर को फ्लश करने से पहले एक सॉकेट पर कई मेगाबाइट रखता है।) – sarnold
मेरा अनुमान होगा कि आपके पास gpip संपीड़न या तो php.ini और/या apache config में सक्षम है। उस मामले में अपाचे हमेशा कैश करता है। इस से बचने के लिए कोई रास्ता नहीं मिला है (संपीड़न को अक्षम करने के अलावा), तो देखते हैं कि अन्य लोगों को इसके बारे में क्या पता है। Serverfault.com के लिए एक सवाल हो सकता है, हालांकि ... – BlaM
@ कर्नाल्ड - जब मैं कहता हूं कि मैं अनुमान लगा रहा हूं कि यह एक शिक्षित अनुमान है क्योंकि मैं फिडलर के माध्यम से अनुरोध को ट्रैक कर रहा हूं और डाउनलोड संवाद प्रकट होने तक कोई प्रतिक्रिया नहीं दिखता इसलिए मुझे पूरा भरोसा है कि यह सर्वर की तरफ कैशिंग है। @BlaM - आप यह कहकर बिल्कुल सही हैं कि जीजेआईपी सक्षम है, मैंने इसे संभावित कारण के रूप में नहीं सोचा क्योंकि यह एक स्ट्रीमिंग संपीड़न है लेकिन यह समस्या हो सकती है। मैं इस विशेष लिपि के लिए अक्षम करने की कोशिश करूंगा और देखें कि क्या होता है। धन्यवाद। – JWood