制作緩存的目的是為了讓我們的頁面運行更加快速,減少讀取數據庫內容的次數,給用戶更好的體驗,為此我們可以使自己的程序做一下緩存,並且設置一個緩存過期的時間,來保證與數據庫的一致,當然並不是所有的程序都適合做緩存,這里簡單介紹一下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:

過了一段時間,又重新生成了緩存,這個時間就是我們之前設置的緩存過期時間。
