php靜態緩存簡單制作


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

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM