2011-03-16 14 views
7

मैंने अपनी फ़ाइलों को एक नए सर्वर पर ले जाया और मेरे पास एक स्क्रिप्ट थी जो ब्राउज़र पर प्रत्येक echo पर तुरंत आउटपुट दिखाती है, लेकिन यह नए सर्वर पर काम नहीं कर रही है। यहां मेरा टेस्ट कोड है:सभी ब्राउज़रों पर प्रत्येक गूंज पर आउटपुट को सही तरीके से कैसे दिखाना है?

@ini_set('output_buffering', 0); @ini_set('implicit_flush', 1); 

for ($i = 0; $i < ob_get_level(); $i++) ob_end_flush(); 

ob_implicit_flush(1); 

ignore_user_abort(true); set_time_limit(0); 


$max_wait_time = 30; 

$begin_time = microtime(true); 

$elapsed_time = 0; 


while(!connection_aborted()) { 

    echo $i++.str_repeat(' ', 1020).'<br/>'; 

    flush(); ob_flush(); 

    usleep(1000000); 

    if($elapsed_time > $max_wait_time){ break; } 

    $elapsed_time++; 

} 

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

कोई भी विचार?

उत्तर

13

अंश:

फ्लश() अपने वेब सर्वर बफरिंग योजना ओवरराइड करने के लिए सक्षम नहीं हो सकता है और यह ब्राउज़र में किसी भी क्लाइंट साइड बफरिंग पर कोई प्रभाव नहीं है। [...]

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

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

संभावना अधिक है कि आप एक अलग वेब सर्वर (या वेब सर्वर कॉन्फ़िगरेशन) है, जो यह outputting से पहले पूरी स्क्रिप्ट का आउटपुट बफ़र्स करने के लिए बदल रहे हैं।

+2

यह सबसे अच्छा जवाब है जिसे आप प्राप्त करने की संभावना है। दुर्भाग्यवश, जैसा कि '' फ्लश() ''दस्तावेज कहता है, आप [PHP के भीतर से] गारंटी नहीं दे सकते कि डेटा को बफर करने के अलावा कुछ भी नहीं है। अपाचे सेटिंग्स के साथ घूमने से आपकी मदद हो सकती है, लेकिन अन्यथा मैं वैकल्पिक समाधान के उद्देश्य से सुझाव दूंगा। –

0

ब्राउज़र सामग्री को आउटपुट करते समय स्वयं के लिए निर्णय लेते हैं। इसलिए यदि आप उस दहलीज को पूरा नहीं करते हैं, तो वे केवल तब तक प्रतीक्षा करेंगे जब तक कि यह पूरा नहीं हो जाता है और केवल तब उपयोगकर्ता को और अधिक सामग्री दिखाएं।

flush documentation से
+0

यही सच है .htaccess में जोड़ने के लिए प्रयास करें, लेकिन मुझे नहीं लगता है कि है मेरे लिए मामला क्योंकि यह एक अलग मेजबान का उपयोग करते समय ठीक काम करता है जैसे ही मैंने इसे मीडिया मंदिर पर रखा है, यह शुरू हो रहा है। तो मुझे नहीं लगता कि यह एक ब्राउज़र मुद्दा है। – Abs

+0

आप सर्वर का मतलब है, है ना? यह ब्राउज़रों पर निर्भर करता है जब वे सामग्री प्रदर्शित करेंगे, लेकिन जब वे भेजे जाते हैं तो वे सर्वर भेजते हैं। –

+0

वे इसे चूसते हैं, लेकिन इसका मतलब यह नहीं है कि वे इसे तुरंत दिखाएंगे। या तो मुझे बताया गया था ... – DanMan

1

की स्थापना आप देख रहे हैं अपने php.ini में है और यह output_buffering कहा जाता है:

; output_buffering 
; Default Value: Off 
; Development Value: 4096 
; Production Value: 4096 

सेट इसे बंद मैन्युअल रूप से और जब भी आप चाहें फ्लश() वास्तव में फ्लश कुछ बनाने के लिए अपने वेब सर्वर को पुनः आरंभ करने , 4kb डेटा के बाद नहीं :)

ध्यान दें कि ini_set को हमेशा इसके लिए काम नहीं करना पड़ता है। आप पूर्ण नियंत्रण चाहते हैं, तो अपने आप में php.ini में उसे निष्क्रिय, या एक .htacces php_value ध्वज के रूप में

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

  • कोई संबंधित समस्या नहीं^_^