缓存数据,这个并不是暂存的缓存,而是写入了内存的缓存

通过一个例子来书写:缓存数据

一、书写php和html页面的基本功能

既然是用smarty模板,那么前端和后端要分开写了

(1)php页面

<?php
$filename = "../cache/huancun.html"; //这个是放缓存的页面(缓存的不是代码,而是页面的源信息) include("../init.inc.php"); //引入入口文件
include("../DBDA.php"); //引入数据库,要用到数据库的内容 $db = new DBDA(); //造新对象
$sql = "select * from chinastates"; //这是查找Chinastates表中的信息
$attr = $db->Query($sql); //执行这个语句 $smarty->assign("shuzu",$attr); //注册变量信息
$smarty->display("huancun.html"); //显示模板

(2)html页面

可以用表来显示数据

<h1>数据列表</h1>
<table width="50%" 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>

看下效果

二、就是编写“缓存”功能

进行写入缓存的时候不是写入的上面的php页面,而是这个页面的源代码

(1)这个cache文件中要判断这个huancun.html文件存不存在,存在怎么样?不存在怎么样?

结果就是:如果缓存文件存在:直接调用缓存;如果缓存文件不存在:重新缓存。

A.如果这个文件存在(判断文件存不存在用的是:file_exists()方法)语句:

if(file_exists($filename))
{
//直接调用缓存
include($filename);
}

B.否则(文件不存在)

重要的是要在上面读取数据库的内容加上这几项:

1.开启内存缓存;

2.关闭内存缓存;

它们是成对的!!!

else
{
//重新缓存
ob_start(); //开启内存缓存 include("../init.inc.php");
include("../DBDA.php"); $db = new DBDA();
$sql = "select * from chinastates";
$attr = $db->Query($sql); $smarty->assign("shuzu",$attr);
$smarty->display("huancun.html"); $str = ob_get_contents(); //获取内存中的缓存内容
file_put_contents($filename,$str); //将字符串中的内容放入$filename的文件中 ob_flush(); //关闭内存缓存 echo "#######################################"; //这个是为了区别哪个是刚出来的缓存文件 }

看下效果如下图,因为cache文件夹中没有hunacun.html才会走上面的“否则”语句,输出一长串的######

再刷新一下就没有了,因为cache文件夹中已经有了huancun.html文件

三、缓存的有效时间

缓存要是一直都在的话,那么后台怎么改,前面也不会进行修改,那么就要尽心缓存的有效时间

代码如下:

$time = 10;  //缓存有效期10秒
if(file_exists($filename) && ((filemtime($filename)+$time)>= time()) ) //这是对缓存文件的判断

当缓存文件有了并且10秒之后就会重新又没有缓存文件时候的输出####  

四、进行分页的缓存

首先是分页的php页面的书写,在上面的更新的php页面中进行再一次修改,如下:

<?php
$p = 1;
if(!empty($_GET["page"]))
{
$p = $_GET["page"];
} $filename = "../cache/huancun{$p}.html"; //缓存文件存放的位置 $time = 10; //缓存有效期10秒
if(file_exists($filename) && ((filemtime($filename)+$time)>= time()) )
{
//直接调用缓存
include($filename);
}
else
{
//重新缓存
ob_start(); //开启内存缓存 include("../init.inc.php");
include("../DBDA.php"); $db = new DBDA();
$sqll = "select count(*) from chinastates";
$zts = $db->StrQuery($sqll); //总条数的执行语句 include("../page.class.php");
$page = new Page($zts,10); //分页显示的条数 $sql = "select * from chinastates ".$page->limit; //分页的$page->limit
$attr = $db->Query($sql); $smarty->assign("fpage",$page->fpage()); //分页信息的显示
$smarty->assign("shuzu",$attr);
$smarty->display("huancun.html"); $str = ob_get_contents(); //获取内存中的缓存内容
file_put_contents($filename,$str); //将$str的内容写入$filename的文件中 ob_flush(); //关闭内存缓存 echo "#######################################"; }

结果就是入下,每一个页面都会从缓存开始有,10秒后失效

这是第二个页面,刚开始没有缓存文件,所以会有####

随便点一页,回来后就是有了缓存文件,所以没有了###

后面的也是一样的~~~

smarty模板基础3 *缓存数据*的更多相关文章

  1. smarty模板里实现缓存。

    smarty模板里实现缓存.分页缓存在任何里都可以用 我用了三个类 include("../init.inc.php");//模板入口类 include("../DBDA ...

  2. smarty模板基础----缓存数据

    缓存数据,这个并不是暂存的缓存,而是写入了内存的缓存 通过一个例子来书写:缓存数据 一.书写php和html页面的基本功能 既然是用smarty模板,那么前端和后端要分开写了 (1)php页面 1 2 ...

  3. smarty模板基础1

    smarty模板的作用可以让前端和后端分离(也就是前端的显示页面和后端的php代码). smarty模板的核心是一个类,下载好的模板中有这么几个重要的文件夹 (1)libs核心文件夹(2)int.in ...

  4. smarty模板基础2

    Smarty自带了一些内置函数,这些内置函数是Smarty模板引擎的组成部分.他们被编译成相应的内嵌PHP代码,以获得最大性能. 您创建的自定义函数不能与内置函数同名,也不必修改这些内置函数. 其中一 ...

  5. smarty模板基础知识

    1.定义 Smarty是一个使用php写出来的模板引擎,它分离了逻辑代码和外在的内容,提供了一种易于管理和使用的方法,用来将原本与html代码混杂在一起PHP代码逻辑分离. 简单的讲,目的就是要使PH ...

  6. smarty模板基础

    将前台后台隔离,前台控制显示,后台控制逻辑/内容,与cms类似 原理: 用户访问text.php页面,后台调用类smarty.class.php显示静态模板;

  7. Smarty模板引擎技术二

    Smarty模板引擎技术 内建函数 include_php内建函数 作用:载入一个php文件,将载入的文件的内容赋值给一个变量   注意:该内建函数只能在2.0中使用,如果使用的话,必须得实例化Sma ...

  8. smarty模板开发基础总结

    前提:1. 部署smarty模板目录:2. 编写Smarty类的子类,定制好template_dir.compile_dir.config_dir.cache_dir.left_delimiter.r ...

  9. smarty模板引擎(一)基础知识

    一.基本概念 1.什么是mvc?     mvc是一种开发模式,核心思想是:数据的输入.数据的处理.数据显示的强制分离. 2.什么是smarty?     smarty是一个php的模板引擎.更明白的 ...

随机推荐

  1. checkbox、radio控件和文字不对其

    一般使用html控件的时候  单选按钮和复选框的控件和文字不对齐 给input控件加上   style="vertical-align: middle; margin-top: -2px; ...

  2. jQuery对象插件封装步骤

    jQuery是js的一个非常优秀的库,它大大简化了js的很多操作,并且解决了js的大部分兼容性问题.甚至很多css兼容性问题,用jQuery写都能解决. 这里是对象插件的封装.当然,封装插件很多,这里 ...

  3. PAT1013 数素数

    思路: 打印素数表 然后找出对应区间[m,n]中的素数 #include <iostream> #include <vector> #include <cmath> ...

  4. Angular - - $resource 更高端的数据交互

    $resource 创建一个resource对象的工厂函数,可以让你安全的和RESFUL服务端进行数据交互. 需要注入 ngResource 模块.angular-resource[.min].js ...

  5. js模块化开发——require.js的用法详细介绍(含jsonp)

    RequireJS的目标是鼓励代码的模块化,它使用了不同于传统<script>标签脚本加载步骤.可以用它回事.优化代码,但其主要的目的还是为了代码的模块化.它鼓励在使用脚本以moudle ...

  6. Everything开机自启

    第一步:关闭自动启动 在设置中关闭everything开机自动启动. 第二步:创建计划任务 点击“开始”—“任务计划程序”—“创建任务” 首先设置任务的名称等,注意一定要勾选“使用最高权限运行”. 然 ...

  7. HDU-1995-汉诺塔V

    题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=1995 这题不知道该说水还是不水,对于这题我看到题目数据,就有了想法,因为题目数据给的好 所以我直接 假 ...

  8. 部署Replica Sets及查看相关配置

    MongoDB 支持在多个机器中通过异步复制达到故障转移和实现冗余.多机器中同一时刻只有一台是用于写操作.正是由于这个情况,为MongoDB 提供了数据一致性的保障.担当Primary 角色的机器能把 ...

  9. 利用Flare3D和Stage3D创建3D

    Flare3D 是一款功能强大的引擎,它使得 Flash 中的 3D 内容管理变得更为简便. 它的设计宗旨是提供一个完美的开发工作流程,以便你能够获得事半功倍的效果. 本教程侧重讨论在 Flash 中 ...

  10. 启动activity与使用Intent通信机制解析

    我们都知道,一个activity启动另一个activity最简单的方式就是使用startActivity方法: public void startActivity (Intent intent) 但是 ...