【PHP】静态缓存简单应用

来源:互联网 发布:ubuntu查看当前目录 编辑:程序博客网 时间:2024/05/29 16:55

制作缓存的目的是为了让我们的页面运行更加快速,减少读取数据库内容的次数,给用户更好的体验,为此我们可以使自己的程序做一下缓存,并且设置一个缓存过期的时间,来保证与数据库的一致,当然并不是所有的程序都适合做缓存,这里简单介绍一下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:

图示

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

转自:http://www.cnblogs.com/lingxin/p/6202220.html

1 0