PHP flush 失效問題 (實時顯示)
阿新 • • 發佈:2019-02-12
做實時顯示到資料瀏覽器時,用到了 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就乘以幾,否則也會達不到效果
這樣就可以了