為什麼這個不是慢慢輸出

來源:互聯網
上載者:User
關鍵字 php


而是6秒後全部輸出

回複內容:


而是6秒後全部輸出

正常情況下,PHP指令碼執行完畢後才會把所有結果返回給瀏覽器,如果你想提前返回,則需要手動flush推送,比如:

BubbleSort.php'.str_repeat(' ', 1024*4);    ob_flush();    flush();    sleep(1);}echo 'Done.';ob_end_flush();?>每隔1秒顯示1行:Array ( [0] => 0 [1] => 1 [2] => 2 [3] => 3 [4] => 4 [5] => 5 [6] => 6 [7] => 7 [8] => 8 [9] => 9 )Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 [5] => 6 [6] => 7 [7] => 8 [8] => 9 [9] => 0 )Array ( [0] => 2 [1] => 3 [2] => 4 [3] => 5 [4] => 6 [5] => 7 [6] => 8 [7] => 9 [8] => 1 [9] => 0 )Array ( [0] => 3 [1] => 4 [2] => 5 [3] => 6 [4] => 7 [5] => 8 [6] => 9 [7] => 2 [8] => 1 [9] => 0 )Array ( [0] => 4 [1] => 5 [2] => 6 [3] => 7 [4] => 8 [5] => 9 [6] => 3 [7] => 2 [8] => 1 [9] => 0 )Array ( [0] => 5 [1] => 6 [2] => 7 [3] => 8 [4] => 9 [5] => 4 [6] => 3 [7] => 2 [8] => 1 [9] => 0 )Array ( [0] => 6 [1] => 7 [2] => 8 [3] => 9 [4] => 5 [5] => 4 [6] => 3 [7] => 2 [8] => 1 [9] => 0 )Array ( [0] => 7 [1] => 8 [2] => 9 [3] => 6 [4] => 5 [5] => 4 [6] => 3 [7] => 2 [8] => 1 [9] => 0 )Array ( [0] => 8 [1] => 9 [2] => 7 [3] => 6 [4] => 5 [5] => 4 [6] => 3 [7] => 2 [8] => 1 [9] => 0 )Array ( [0] => 9 [1] => 8 [2] => 7 [3] => 6 [4] => 5 [5] => 4 [6] => 3 [7] => 2 [8] => 1 [9] => 0 )Done.

PHP_CLI_Server能夠即時輸出.Apache和Nginx的gzip可能會進行輸出緩衝,這將導致flush()函數產生的結果不會立即被發送到用戶端瀏覽器.
在Nginx+PHP-FPM下還要注意Nginx的fastcgi buffer,比如:
fastcgi_buffer_size 128k;
fastcgi_buffers 8 128k;
表示Nginx會緩衝PHP-FPM輸出的資訊,當達到128k時才會將緩衝區的資料發送給用戶端,那麼我們首先需要將這個緩衝區調小:
fastcgi_buffer_size 4k;
fastcgi_buffers 8 4k;
並且,必須禁用gzip:
gzip off;
然後,在php中,在ob_flush和flush前,輸出一段達到4k的內容,例如:
echo str_repeat(' ', 1024*4);
到此,PHP就可以正常通過ob_flush和flush逐行輸出需要的內容了.

樓上正解,但你也看到緩衝這類瀏覽器安全色性問題很多。
既然慢慢輸出不如選用js,隔1秒從後台擷取一次訊息。

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.