smarty模板里实现缓存。

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

 

posted @ 2017-03-07 13:51  黄力军  阅读(387)  评论(0编辑  收藏  举报