ob_implicit_flush是一種PHP函數,它被用來自動刷新輸出緩沖。也就是說,當這個函數被設置為true時,所有輸出語句都不需要調用flush或者ob_flush來輸出。這種自動刷新輸出緩沖的方式,能夠在某些特定情況下,為我們帶來極大的方便和效率。
比如說,你正在使用PHP腳本來生成和輸出HTML頁面內容。如果你希望在頁面依次加載時,讓內容漸漸地呈現出來,而不是一次性全部呈現,那么ob_implicit_flush函數就可以派上用場:
ob_start(); echo ''; echo 'Loading...Please Wait '; echo ''; echo '正在載入頁面,請稍后...
'; ob_flush(); flush(); sleep(2); //模擬長時間操作 echo '這是一個很漂亮的頁面!
'; ob_flush(); flush(); echo ''; ob_end_flush();
在這個例子中,通過ob_start啟動輸出緩沖,并使用ob_flush和flush手動輸出第一個段落,然后程序需要經過一個模擬長時間操作,這時候會自動輸出中途結果,等到完成模擬操作后會輸出完整HTML頁面。
有些時候,由于網絡等原因,php的輸出結果并不能在完整的html布局中被瀏覽器正確地呈現。這時候,你可以在你的腳本中使用該函數,也可以在附加header的時候加上如下代碼來達到同樣的效果:
header("Content-Encoding: none;" ); header("Transfer-Encoding: chunked"); header("Cache-Control: private");
需要注意的是,ob_implicit_flush函數默認情況下是關閉的。這意味著,在使用輸出語句時,你必須顯式地調用flush()函數以便把緩沖區內的內容輸出。如果你沒有關閉輸出緩沖區的話,就不用說了,你的結果可能會出現很奇怪的錯誤。所以,如果你需要使用這種自動刷新的輸出緩沖方式,你一定要首先設置這個函數為true。
ob_implicit_flush函數有兩個參數,第一個是要設置的值(true或false),第二個參數是可選的。第二個參數表示就算開啟了這個函數,也要等到緩沖區中的大小達到這個數值時才開始刷新。
還有一點要注意的是,使用ob_implicit_flush函數也帶來了一些風險。因為它會自動把輸出緩沖刷到屏幕上,所以如果你的代碼中存在語法錯誤或者在輸出過程中已經輸出了頭部(比如使用echo“
“之類的語句),就會因為無法再次發送頭部而產生錯誤。因此,當使用ob_implicit_flush函數時,請務必保證你的代碼沒有頭部輸出,或者將頭部輸出放到函數調用之后。