zoukankan      html  css  js  c++  java
  • 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就走#这个页面

  • 相关阅读:
    给一个二维数组随机赋值
    sql server use WAITFOR DELAY to wait some milliseconds
    sql server print time with milliseconds
    UE4 LeapMotion 获取手掌朝向
    Unity打包Android出现Failed to find Build Tools revision
    UE4中Yaw,Roll,Pitch分别对应什么轴?
    Unity 遍历场景所有物体(包括隐藏及被禁用的物体)
    C#-Linq扩展方法DistinctBy
    Unity编辑器扩展--Scene Manager
    Unity查找功能编辑器扩展Searcher
  • 原文地址:https://www.cnblogs.com/aqxss/p/6514374.html
Copyright © 2011-2022 走看看