zoukankan      html  css  js  c++  java
  • 怎么用php语言来做文件缓存

    使用缓存能够让我们的程序访问起来更加快速,缓存可以减少对数据库的操作,体验起来更好一些,对服务器的压力也小一些,当然服务速度很快

    php文件执行完之后产生的解析完的数据,保存成静态的网页,下次打开的这个文件的时候,如果发现之前执行过了,就可以把之前保存的静态网页拿出来显示了

    它也有个缺点,就是不能时时的与数据库同步

    适用范围,一般的小程序都可以用缓存,对时间要求特别苛刻的,比如抢购什么的就不能使用缓存文件了

    写缓存文件,

    一样要有php文件

    php文件还是放在main目录下

    相对应的html文件还是写在对应的文件夹下

    先把数据库的一系列数据输出一下

    php文件中

    复制代码
    <?php
    
    $filename = "../cache/huancun.html";
    //缓存文件的路径
     
    include("../init.inc.php");
    include("../DBDA.php");
    $db = new DBDA();
    
    $sql = " select * from nation ";
    $arr = $db->Query($sql);
    
    $smarty->assign("shuzu",$arr);
    $smarty->display("huancun.html");
    复制代码

    html文件中

    复制代码
    <!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>
    </tr>
    
    <{foreach $shuzu as $v}>
    <tr>
    <td><{$v[0]}></td>
    <td><{$v[1]}></td>
    <td>操作</td>
    </tr>
    <{/foreach}>
    </table>
    </body>
    </html>
    复制代码

    运行后数据就显示出来了

    所谓的缓存,并不是把我们写的这些代码存下来,审查一下它的源代码

    而是把这些保存下来,变成一个静态的,当刷新的时候,直接把已经保存下来的数据直接显示出来,就不再重新访问数据库了,这样节省了很多时间,那如果数据库里面的数据有所变动的话,再走缓存文件就不能把新的数据及时反馈出来了

    上面的代码是没有写缓存操作的样子,下面再来做一下缓存操作

    html文件中不用修改

    php文件中

    复制代码
    <?php
    
    $filename = "../cache/huancun.html";
    //缓存文件的路径
     //判断缓存文件是否存在,如果缓存文件存在直接调用缓存文件,如果缓存文件不
     //存在重新缓存
     if(file_exists($filename))
     {
       //直接调用缓存
       include($filename);     
     }
     else
     {
       //重新缓存
       ob_start();  //开启内存缓存
       
       include("../init.inc.php");
       include("../DBDA.php");
       $db = new DBDA();
    
       $sql = " select * from nation ";
       $arr = $db->Query($sql);
    
       $smarty->assign("shuzu",$arr);
       $smarty->display("huancun.html");
       
       $str = ob_get_content();   //获取内存中的缓存内容
       file_put_contents($filename,$str);
       
      ob_flush();  //关闭内存缓存      
      
      echo "#########################";
     }
    复制代码

    这个一开始运行肯定没有缓存,所以会输出最后的一串井号,再次刷新时就有缓存了,所以直接运行上面的代码,下面的代码就不走了

    运行一下,看看效果

    再来看一下cache文件夹里面有没有huancun.html文件

    然后点开看一下

    以静态的方式保存了这张表格

    再刷新一下那张表格

     刷新后表格下面的一串井号消失了

    再刷新后也没有井号

    所以走的是缓存文件

    我们从数据库改个数据看看效果

    改了第一个汉族

    然后再刷新一下表格

    数据并没有改变

    说明缓存文件已经有了,再刷新就只走缓存文件了

    再把这个缓存改进一下,只需改php文件就可以

    给它加上有效期,每隔十秒重新缓存一次,这样就不会出现数据库改变,数据刷新不出来的结果了

    刷新后井号消失

    十秒后刷新,原来的缓存文件过期,就会重新缓存一遍,井号就又会出现

    这样就是静态缓存的一种方法

    分页的话也可以使用

    php文件中

    复制代码
    <?php
    $p=1;
    if(!empty($_GET["page"]))
    {
        $p=$_GET["page"];
    }
    $filename = "../cache/huancun{$p}.html";
    //缓存文件的路径
    
    $time=30;   //缓存有效期30秒
    
     //判断缓存文件是否存在,如果缓存文件存在直接调用缓存文件,如果缓存文件不
     //存在重新缓存
     if(file_exists($filename) && ((filemtime($filename) + $time)>=time()))
     {
       //直接调用缓存
       include($filename);     
     }
     else
     {
       //重新缓存
       ob_start();  //开启内存缓存
       
       include("../init.inc.php");
       include("../DBDA.php");
       $db = new DBDA();
      
      $sall = "select count(*) from nation";
      $zts = $db->StrQuery($sall);
      include("../page.class.php");
      $page = new Page($zts,5);
      
       $sql = " select * from nation ".$page->limit;
       $arr = $db->Query($sql);
       
       $smarty->assign("fpage",$page->fpage());
       $smarty->assign("shuzu",$arr);
       $smarty->display("huancun.html");
       
       $str = ob_get_contents();   //获取内存中的缓存内容
       file_put_contents($filename,$str);
       
      ob_flush();  //关闭内存缓存      
      
      echo "#########################";
     }
    复制代码

    html文件中,只需要输出个分页就好了

    然后运行

    再点击第二页

    第三页四页都可以点击

    看一下cache目录下的文件

    每个分页的内容都被保存下来了

    30秒内刷新走的都是缓存文件

    无论分多少页都可以

  • 相关阅读:
    升级安装 Ubuntu 后该做的20项优化工作
    Delphi中点击DBGrid某一行获得其详细数据方法
    android eclipse xml不自动代码提示
    区别不同浏览器,CSS hack写法
    自我介绍
    秋季学期学习总结
    人生路上影响最大的三位老师
    SQL优化34条
    Visual Studio 2010将支持多种架构设计图
    Visual Studio 2010的SharePoint工作流功能
  • 原文地址:https://www.cnblogs.com/jc535201285/p/6516295.html
Copyright © 2011-2022 走看看