標籤:沒有 重新整理 sleep 利用 exit 調用 manual tco dex
先看一個簡單的例子
<?php ob_start(); echo 111; ob_clean(); echo 222;
ob_start()開啟ob緩衝,然後111放進了ob緩衝, 再調用ob_clean()清除緩衝,最後輸出的結果是222。
原理:頁面執行到最後, 會把ob緩衝的資料(如果有的話)強制重新整理到程式緩衝, 然後通過apache對資料封裝成http響應包, 返回給瀏覽器。
注意:header頭資訊放程式緩衝,如果沒有ob緩衝,則所有資料直接放程式緩衝。
更多api參考 : http://php.net/manual/zh/ref.outcontrol.php
<?phpfor($i = 0; $i < 3; $i++){ echo $i; sleep(1); flush();}
flush 只是重新整理到瀏覽器緩衝, 然後程式結束時再一起輸出。
我把瀏覽器緩衝佔滿就能看到效果.
<?phpob_end_clean(); //php.ini中設定了開啟ob緩衝, 所以關閉一下.echo str_repeat(‘ ‘,1024);for($i = 0; $i < 5; $i++){ echo $i; sleep(1); flush();}
ob緩衝中能存放哪些資料.
ob_start() 開始到 ob_get_contents()之間返回給瀏覽器的資料。
實現頁面靜態化可以使用正則替換, 也可以利用ob實現頁面靜態化。
<?php if(file_exists(‘index.html‘) && filemtime(‘index.html‘) + 60 >= time()){ echo file_get_contents(‘index.html‘); exit; } ob_start();?> //這裡寫原來的代碼<?php $html_str = ob_get_contents(); file_put_contents(‘index.html‘, $html_str);?>
如果內容修改, 我們看不到最新內容, 這是我們可以簡單最佳化, 每過60秒重新整理一次。
php 中的 Output Control 函數