smarty模板里实现缓存。分页缓存在任何里都可以用
我用了三个类
include("../init.inc.php");//模板入口类 include("../DBDA.php");//自己写的方法1.成员变量2.返回字符串的方法 include("../page.class.php");//分页类
huancun.PHP文件
<?php $p = 1; if(!empty($_GET["page"])) { $p = $_GET["page"]; } //缓存网页放在cache文件夹里 //要把文件保存起来首先定义一个路径,需要知道这个文件夹保存的位置,路径相对于这个页面来说 $filename = "../cache/huancun{$p}.html";//缓存文件存放的位置filename $time = 10;//缓存有效期10秒 10秒一刷新在调取数据库 在执行缓存 //逻辑。如果文件存在并且在缓存时间内(取文件上次修改的时间获取的是时间戳)如果上次修改文件的时间加上10大于等于当前时间就调缓存 //判断缓存文件是否存在,如果缓存文件存在直接调用缓存,如果缓存文件不存在重新缓存。 if(file_exists($filename) && ((filemtime($filename)+$time)>= time()))//循环。判断 这句话是判断缓存有效期&& 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,2);//对象 条数每页显示2条 $sql = " select * from nation ".$page->limit;//他nation表 $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); //从缓存中取内容,获取内存中的缓存内容 $atr = ob_get_contents();//返回的是。把缓存的 file_get_contents($filename,$atr);//把缓存的文件 往filename 这句意思往文件里放内容 ob_flush();//关闭内存缓存 echo "##########################################################"; } ?>huancun.html文件
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>模板页</title> </head> <body> <table width="100%" border="1" cellpadding="0" 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> <div><{$fpage}></div> </body> </html>
缓存没有# 在主页面显示的是缓存在cache文件夹里的源代码
有#的时候是数据库里面的变动的文件
判断缓存文件是否存在
没有#号的时候缓存文件时存在的,如果缓存文件存在直接调用。如果缓存文件不存在从新加载缓存,从新加载缓存可以用时间戳。取文件上次修改的时间获取的是时间戳)如果上次修改文件的时间加上10大于等于当前时间就调缓存,如果小于10就走#这个页面