zoukankan      html  css  js  c++  java
  • 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:

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

  • 相关阅读:
    2.8Java专项测试复盘
    我的第一篇博客
    VS2010调试汇编
    socket学习
    DLL 共享数据学习
    PE学习
    char*,const char*和string的相互转换 + 三种版本字符串
    unresolved external symbol “symbol”(不确定的外部“符号”)。
    深入理解const char*p,char const*p,char *const p,const char **p,char const**p,char *const*p,char**const p
    volatile学习
  • 原文地址:https://www.cnblogs.com/lingxin/p/6202220.html
Copyright © 2011-2022 走看看