ob_flush(),flush()無法正常工作

來源:互聯網
上載者:User
已尋找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位元組的內容,這時是不會向下一層級的緩衝區輸出的。只有超出了這個容量才會輸出。

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.