標籤:體驗 時間 擷取檔案 att 好的 set 執行 sql語句 res
製作緩衝的目的是為了讓我們的頁面運行更加快速,減少讀取資料庫內容的次數,給使用者更好的體驗,為此我們可以使自己的程式做一下緩衝,並且設定一個緩衝到期的時間,來保證與資料庫的一致,當然並不是所有的程式都適合做緩衝,這裡簡單介紹一下php靜態緩衝製作的方法:
1.首先我們要定好一個快取檔案存放的位置,即存放目錄
例如我這裡存放在cache目錄下,將來所有的快取檔案都放到該目錄下
2.在要做靜態緩衝的頁面,我們定義一個變數來存放一個快取檔案的路徑(相對於當前頁面的路徑)
$filename = "./cache/test.html";
3.定義一個變數來儲存緩衝到期時間
$cachetime = 5;
4.判斷一下,快取檔案是否存在或者是否到期,如果快取檔案不存在就執行原始碼產生緩衝,或者時間到期了也應該重新緩衝一下,如果上述條件不滿足則調用快取頁面面顯示。
if(!file_exists($filename) || filemtime($filename)+$cachetime<time()){//快取頁面面代碼}else{include($filename);//如果存在,調用快取檔案}
5.產生緩衝,在頁面輸出內容之前,我們調用ob_start()方法開啟記憶體緩衝區,將要輸出的內容放到記憶體裡面。
ob_start();
6.在頁面輸出完之後,將記憶體中擷取到的內容儲存下來,存為一個靜態頁面。
//從記憶體緩衝中擷取頁面代碼$content = ob_get_contents(); //將擷取到的內容存放到快取檔案file_put_contents($filename,$content); //清掉記憶體緩衝ob_flush();
7.最後我們加上一段輸出,來測試是否重新緩衝了,如果頁面有輸出該內容代表重建了快取檔案,如果沒有,說明是直接讀的快取檔案
echo "######################################"; //測試是否調用了快取檔案,快取檔案不輸出這句話
這樣我們就簡單做了一個靜態緩衝,完整代碼如下:
<?php$filename = "./cache/test.html";//定義緩衝有效期間$cachetime = 5;//判斷快取檔案是否存在if(!file_exists($filename) || filemtime($filename)+$cachetime<time()) //filemtime($filename)擷取檔案修改時間,加上定義的緩衝時間小於目前時間{ //開啟記憶體緩衝 ob_start();?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>無標題文檔</title></head><body><h1>水果資訊表</h1><table width="100%" border="1" cellpadding="0" cellspacing="0" ><tr> <td>代號</td> <td>名稱</td> <td>價格</td> <td>產地</td> <td>庫存</td> <td>操作</td> </tr> <?php//造連線物件$db = new MySQLi("localhost","root","123","mydb");//寫SQL語句$sql = "select * from fruit";//執行$result = $db->query($sql);//取資料/*$attr = $result->fetch_all();foreach($attr as $v){echo "<tr><td>{$v[0]}</td><td>{$v[1]}</td><td>{$v[2]}</td><td>{$v[3]}</td><td>{$v[4]}</td></tr>";}*/while($attr = $result->fetch_row()){echo "<tr><td>{$attr[0]}</td><td>{$attr[1]}</td><td>{$attr[2]}</td><td>{$attr[3]}</td><td>{$attr[4]}</td><td><a href=‘shanchu.php?code={$attr[0]}‘ onclick=\"return confirm(‘確定刪除麼‘)\">刪除</a><a href=‘xiugai.php?code={$attr[0]}‘>修改</a></td></tr>";} ?> </table><a href="add.php">添加資料</a></body></html><?php //從記憶體緩衝中擷取頁面代碼 $content = ob_get_contents(); //將擷取到的內容存放到快取檔案 file_put_contents($filename,$content); //清掉記憶體緩衝 ob_flush(); echo "######################################"; //測試是否調用了快取檔案,快取檔案不輸出這句話}else{ include($filename); //如果存在,調用快取檔案}?>
最後來看一下,效果:
第一次執行該頁面,出現緩衝:
再次執行,則沒有重建立立緩衝,而是直接讀取的靜態頁面test.html:
過了一段時間,又重建了緩衝,這個時間就是我們之前設定的緩衝到期時間。
php靜態緩衝簡單製作