實時輸出如果放在js中我們可以直接使用settimeout來守時輸入很方便,但是如果在php中實現起來就不能這樣了,下面我來給介紹利用 ob_flush() 和 flush()函數實現即時實時輸出內容.
一般情況下,PHP都是將整個頁面全部執行完成后,才會把要輸出的內容發送回客戶端,例如如下代碼:
- for ($i = 0; $i < 10; $i++) {
- echo $i;
- sleep(1);
- }
這段代碼會在10秒鐘后一次性輸出“0123456789”,對于運行時間較長的PHP程序來說可能都需要即時輸出內容來查看運行情況,代碼如下:
header(“Content-type:text/html;charset=utf-8″);
設置執行時間不限時,代碼如下:
清除并關閉緩沖,輸出到瀏覽器之前使用這個函數,代碼如下:
ob_end_clean();
控制隱式緩沖瀉出,默認off,打開時,對每個 print/echo 或者輸出命令的結果都發送到瀏覽器,代碼如下:
ob_implicit_flush(1);
這就用到了PHP的輸出控制函數ob_flush()和flush(),我們把代碼修改成下面這樣,代碼如下:
- $str = 'Hello world";
- echo $str . str_repeat(' ', 256);
- ob_flush();
- flush();
- sleep(10);
- echo $str;
這段代碼則會馬上在屏幕上打印 Hello world,關鍵就在于第2和第3行調用的兩個函數 ob_flush() 和 flush(),這兩個函數得一起使用才能保證頁面馬上輸出Hello world,其中str_repeat(' ', 256)則是為了解決某些瀏覽器必須在接收到256個字符后才會顯示內容.
對上面函數升級,代碼如下:
- <?php
- error_reporting(0);
- set_time_limit(0);
- $buffer = ini_get('output_buffering');
- echo str_repeat(' ',$buffer+1);
- ob_end_flush();
- for($i=1;$i<100;$i++){
- echo "$i<br>";
- sleep(1);
- flush();
- }?>
這樣,頁面就會每一秒輸出一個數字,我們可以很方便的使用PHP的輸出控制來實現頁面執行進度的顯示,不過,由于PHP頁面有執行時間限制,而且長時間執行一個頁面會對服務器造成一定的壓力.
新聞熱點
疑難解答