已尋找php手冊,但沒有找到問題的原因。具體如下。
代碼一:能正常工作的代碼
'; ob_flush(); flush(); sleep(1);}?>
代碼二:不能工作的代碼
'; ob_flush(); flush(); sleep(1);}?>
代碼二中,先輸出str_pad(' ', 4096),接著再迴圈輸出1,2,3,……,與代碼一的區別僅在於代碼一每次迴圈都需要echo str_pad(' ', 4096),為什麼代碼二無法正常運行。
運行環境:
win + php5.3.8
回複內容:
已尋找php手冊,但沒有找到問題的原因。具體如下。
代碼一:能正常工作的代碼
'; ob_flush(); flush(); sleep(1);}?>
代碼二:不能工作的代碼
'; ob_flush(); flush(); sleep(1);}?>
代碼二中,先輸出str_pad(' ', 4096),接著再迴圈輸出1,2,3,……,與代碼一的區別僅在於代碼一每次迴圈都需要echo str_pad(' ', 4096),為什麼代碼二無法正常運行。
運行環境:
win + php5.3.8
PHP中預設的buffer是4096kb,在output到達buffer大小前都會緩衝起來,調用flush可以輸出buffer中的內容到client。
至於你說的第二個例子不起作用問題,我覺得可能是因為PHP中預設是開啟了buffer的,這時候的buffer level是1,你再使用ob_start,buffer level就變為2了,現在flush的內容還是被緩衝到level為1的buffer中,而還未到達預設buffer的size,就不能間隔輸出內容了。
另外第二個地理,你可以去掉開頭的ob_start調用,應該就有效果。
cache需要達到一定的長度才會在瀏覽器輸出顯示的.
Forccy的回答基本正確。稍作補充:
首先,使用如下的方式開啟緩衝:
if (ob_get_level() == 0) ob_start();
代碼二中
echo str_pad(' ', 4096);
向緩衝區中輸入了4096位元組的內容,這時是不會向下一層級的緩衝區輸出的。只有超出了這個容量才會輸出。