1. 程式人生 > >PHP flush 失效問題 (實時顯示)

PHP flush 失效問題 (實時顯示)

做實時顯示到資料瀏覽器時,用到了 flush 函式,但是這個失效了。還是請求完全部輸出到瀏覽器中。這個問題解決方法,

1.Nginx 中有下面兩個設定

fastcgi_buffer_size 128k;
fastcgi_buffers 8 128k;

Nginx 會緩衝php的輸出資訊,當到達128K時會將快取區的資料傳送給客服端,那麼我們需要將這個快取區調小

fastcgi_buffer_size 4k;
fastcgi_buffers 8 4k;

fastcgi_buffers :   指nginx需要用多大的緩衝區緩衝fastcgi的應答請求(整個應答),如果一個php指令碼所產生的頁面大小為256kb,那麼會分配4個64kb緩衝區來快取,如果頁面大於256kb,那麼大於256kb的部分會快取到fastcgi_temp指定的路徑中,但是因為記憶體中資料處理遠快於磁碟, 所以這個值應該為站點中php所產生的頁面大小的中間值, 如果站點大部分php指令碼產生的頁面為:256kb, 那麼可以設定成成”8 16k 4 64k”

fastcgi_buffer_size :  整個資料請求需要多大的快取區

2.必須禁用gzip

gzip off; //必須禁用 親測

3.然後,在php中,在flush前,輸出一段達到4k的內容,例如:

echo str_repeat(‘ ‘, 1024*4);//fastcgi_buffer_size 數多大。1024就乘以幾,否則也會達不到效果

這樣就可以了