[請益] flush的問題

看板PHP作者 (臉都歪了)時間12年前 (2013/03/21 11:46), 編輯推噓2(208)
留言10則, 5人參與, 最新討論串1/1
以下是我的原始碼 <?php ob_start(); for($i=0;$i<70;$i++) { echo 'printing...<br />'; ob_flush(); flush(); usleep(300000); } ?> 照網路上查的資料 這樣寫應該會一段時間印出printing直到結束 可是我在我本機執行的結果都是最後才一次印出來 請問一下是哪裡有問題 哪邊設定要改嗎?? 感謝 ///////找到問題了 我在 echo 'printing...<br />'; 後新增 echo str_pad('',4096)."\n"; 就可以了 可是為什麼會這樣呢 我在php.ini裡面設定檔是 output_buffering = 4096 跟這個有關係嗎 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 60.248.110.133 ※ 編輯: kencool107 來自: 60.248.110.133 (03/21 12:04)

03/21 13:14, , 1F
好像是 IE 的問題...你用別的瀏覽器看原來的程式試試
03/21 13:14, 1F
都一樣耶 ※ 編輯: kencool107 來自: 60.248.110.133 (03/21 14:24)

03/21 16:49, , 2F
ie好像只要塞255個就夠了...
03/21 16:49, 2F

03/21 20:21, , 3F
ob_start()拿掉 改成ob_end_flush()關掉output buffering
03/21 20:21, 3F

03/21 20:23, , 4F
然後for迴圈裡的ob_flush也不需要了 這樣就會每次echo都直
03/21 20:23, 4F

03/21 20:23, , 5F
接輸出給browser 但browser也可能有自己的buffering機制 例
03/21 20:23, 5F

03/21 20:24, , 6F
如某些版本IE收到256 bytes前不會顯示頁面 所以在for迴圈外
03/21 20:24, 6F

03/21 20:26, , 7F
加上str_pad('',256)可以對付IE 其他browser就要請另外測試
03/21 20:26, 7F

03/22 10:31, , 8F
實在不該期待browser和tty行為一樣,這是馬和鹿的差別。
03/22 10:31, 8F

03/24 14:27, , 9F
瀏覽器行為 firefox 和 chrome 就不一樣了
03/24 14:27, 9F

03/24 14:27, , 10F
真的要確保這種效果最好還是用 pulling 之類的方式
03/24 14:27, 10F
文章代碼(AID): #1HIeAWsH (PHP)
文章代碼(AID): #1HIeAWsH (PHP)