2010-03-04 10 views
6

मुझे इसके लिए एक फिक्स चाहिए।
यहाँ मेरी कोडPHP में गूंज/प्रिंट समस्या जबकि लूप

<?php 
$number = 30; 
while($number > 0) { 
$number--; 
sleep(30); 
print "$number . Posted<br>"; 

} 
?> 

पाश में पाश प्रक्रिया वास्तव में बहुत बड़ा है, मैं महत्वपूर्ण चीज़ों डाल का सिर्फ एक हिस्सा है।

फिर भी जैसा कि आप देख सकते हैं इसे प्रिंट चाहिए
30 पोस्ट
(30 सेकंड प्रतीक्षा)
29 प्रकाशित किया गया था
(30 सेकंड प्रतीक्षा)
28 प्रकाशित किया गया था
(30 सेकंड प्रतीक्षा)

लेकिन इसके बजाय यह लूप खत्म होने तक प्रतीक्षा करता है, फिर बस इसे एक बार में प्रिंट करता है। क्या इसे ठीक करने का कोई तरीका है? मैं एक अजाक्स विधि सोच रहा था, लेकिन मैं किसी के बारे में नहीं जानता।

उत्तर

15

अच्छा है कि सभी ने समझाया क्यों।

ऐसा इसलिए है क्योंकि डिफ़ॉल्ट रूप से PHP ब्राउज़र से कुछ भी 'फ़्लश' करने से पहले सब कुछ संसाधित करेगा। प्रत्येक पंक्ति को प्रिंट करके, यह उस जानकारी को बफर में संग्रहीत कर रहा है जिसे एक बार PHP समाप्त होने के बाद सभी को मुद्रित किया जाएगा।

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

+0

+1। – GSto

4

प्रिंटिंग के बाद flush() पर कॉल करें।

0

उपयोग करने के लिए आप echo या print में \n डाल सकता है बफर फ्लश करने के लिए की जरूरत है।

1

फ्लश के साथ एक पाश() का एक उदाहरण

<?php 
ob_start(); 
for ($i = 0; $i < 10; $i++) 
{ 
    echo "<div>" . time() . ": Iteration $i</div>"; 
    sleep(1); 
    ob_flush(); 
    flush(); 
} 
ob_end_flush(); 
?> 

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

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