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就走#这个页面