我拷貝代碼的地址是:http://fr2.php.net/manual/zh/function.ob-flush.php#109314
My Code如下,執行後不是逐行顯示,而是等了很長時間後,一起出現出來:
header('Content-type:text/html; charset=utf-8');if (ob_get_level() == 0) ob_start();for ($i = 0; $i<10; $i++){ echo "
Line to show."; echo str_pad(' ',4096)."\n"; ob_flush(); flush(); sleep(2);}echo "Done.";ob_end_flush();
OS:Mac osx 10.9
webservice: nginx 1.4
php: 5.6
回複內容:
我拷貝代碼的地址是:http://fr2.php.net/manual/zh/function.ob-flush.php#109314
My Code如下,執行後不是逐行顯示,而是等了很長時間後,一起出現出來:
header('Content-type:text/html; charset=utf-8');if (ob_get_level() == 0) ob_start();for ($i = 0; $i<10; $i++){ echo "
Line to show."; echo str_pad(' ',4096)."\n"; ob_flush(); flush(); sleep(2);}echo "Done.";ob_end_flush();
OS:Mac osx 10.9
webservice: nginx 1.4
php: 5.6
運行毫無問題.
Line to show.
Line to show.
Line to show.
Line to show.
Line to show.
Line to show.
Line to show.
Line to show.
Line to show.
Line to show. Done.
PHP版本太高
輸出下ob_get_level()函數看是不是為0,是0的話應該是沒有開啟輸出緩衝區。我這的ob_get_level()返回1。
注意flush和ob_flush的區別:
ob_flush 操作的是php本身的buffer
flush 操作的是 apache 的 flush,也就是說這個對 nginx是無效果的
nginx下要如下設定試一下:
fastcgi_max_temp_file_size 0 #禁止磁碟緩衝fastcgi_buffers 1 1k #把buffer設小
編輯 php.ini,設定 output_buffering=0 禁用 buffering 機制,重啟伺服器試試