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:

过了一段时间,又重新生成了缓存,这个时间就是我们之前设置的缓存过期时间。

 

posted @ 2016-12-20 12:41  Alvin-灵心  阅读(4256)  评论(1编辑  收藏  举报