php輸出緩衝區和快取技術實現
阿新 • • 發佈:2018-10-31
-
系統緩衝區定義:一個記憶體地址空間,用來儲存速度不同步的裝置或者優先順序不同的裝置之間儲存資料。例如使用vim編輯器時,系統並不會立即把一個字元寫入 磁碟而是緩衝區,當寫滿時或者呼叫flush()函式時才儲存到磁碟上。
-
php輸出快取區:預設時當echo或者print時,先把輸出文字放在php輸出快取區時,等到快取區滿了或者服務端指令碼結束時才返回給使用者
-
php緩衝區,預設緩衝大小是4096,4K,當緩衝區滿了才會返回給瀏覽器
public function index() { // for($i=0;$i<10;$i++) { echo "$i"."<br />" sleep(1); } }
-
這個是達到緩衝的最大值,每一秒輸出一次
public function index() { ob_end_clean(); $str=str_repeat('a', 512); for($i=0;$i<10;$i++) { echo $str.'<br />'; flush(); // 把系統緩衝強制返回給瀏覽器 sleep(1); } }
- 使用ob_start()函式會把緩衝大小範圍變得很大,還是要等待程式結束才一起輸出
public function index() { ob_start(); $str=str_repeat('a', 512); for($i=0;$i<10;$i++) { echo $str.'<br />'; flush(); // 把系統緩衝強制返回給瀏覽器 sleep(1); } }
-
將輸出緩衝區內容寫到檔案中去
public function index() { for($i=0;$i<10;$i++) { echo $i.'<br />'; } $f=fopen('D:/test/ob.txt','w') or die('檔案不存在'); fwrite($f, ob_get_contents()); }
- 一個檔案時間的概念
- ctime(change time):狀態修改時間(檔案許可權等) filectime:返回時間戳或者false
- atime(access time):上一次訪問時間 fileatime
- mtime(modify time):檔案內容修改時間 filemtime
- 將html檔案內容寫到檔案中
<html> <head> <title></title> </head> <body> my name is {$name} </body> </html> <?php $f=fopen('D:/test/ob.html','w') or die('檔案不存在'); fwrite($f, ob_get_contents()); fclose($f); ?>
- 簡單快取一個頁面的例子
public function index() { if(cache('index')){ return cache('index'); } cache('index',view('',['name'=>'power']),10); return view('',['name'=>'power']); }
- 一些常用函式
- ob_start() //開啟一個輸出緩衝區,所有的輸出不再直接傳送給瀏覽器二十緩衝區
- ob_get_contents() // 獲取快取區中的內容
- ob_end_clean() // 刪除緩衝區中的內容,關閉緩衝區
- ob_end_flush() // 傳送內部緩衝區內容到瀏覽器並且關閉輸出緩衝區
- flush() // 通知作業系統底層,儘快把資料發給客戶端瀏覽器
- ob_clean() // 刪除緩衝區的內容
- ob_flush() //把輸出快取區中的內容返回到瀏覽器,刪除緩衝區的內容
- 一個檔案時間的概念