ob_flush/flush在手冊中的描述, 都是刷新輸出緩衝區, 而且還須要配套使用, 因此會致使不少人迷惑…html
其實, 他們倆的操做對象不一樣, 有些狀況下, flush根本不作什麼事情..apache
ob_*系列函數, 是操做PHP自己的輸出緩衝區.api
因此, ob_flush是刷新PHP自身的緩衝區.瀏覽器
而flush, 嚴格來說, 這個只有在PHP作爲apache的Module(handler或者filter)安裝的時候, 纔有實際做用. 它是刷新WebServer(能夠認爲特指apache)的緩衝區.緩存
在apache module
的sapi
下, flush
會經過調用sapi_module
的flush
成員函數指針, 間接的調用apache
的api: ap_rflush
刷新apache
的輸出緩衝區, 固然手冊中也說了, 有一些apache的其餘模塊, 可能會改變這個動做的結果..函數
有些Apache的模塊,好比mod_gzip,可能本身進行輸出緩存, 這將致使flush()函數產生的結果不會當即被髮送到客戶端瀏覽器。 甚至瀏覽器也會在顯示以前,緩存接收到的內容。例如 Netscape 瀏覽器會在接受到換行或 html 標記的開頭以前緩存內容,而且在 接受到 </table> 標記以前,不會顯示出整個表格。 一些版本的 Microsoft Internet Explorer 只有當接受到的256個 字節之後纔開始顯示該頁面,因此必須發送一些額外的空格來讓這 些瀏覽器顯示頁面內容。指針
因此, 正確使用倆者的順序是. 先ob_flush, 而後flush,code
固然, 在其餘sapi下, 不調用flush也能夠, 只不過爲了保證你代碼的可移植性, 建議配套使用.htm