smarty模板基础----缓存数据
缓存数据,这个并不是暂存的缓存,而是写入了内存的缓存
通过一个例子来书写:缓存数据
一、书写php和html页面的基本功能
既然是用smarty模板,那么前端和后端要分开写了
(1)php页面
|
1
2
3
4
5
6
7
8
9
10
11
12
|
<?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页面
可以用表来显示数据
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
<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()方法)语句:
|
1
2
3
4
5
|
if(file_exists($filename)){ //直接调用缓存 include($filename);} |
B.否则(文件不存在)
重要的是要在上面读取数据库的内容加上这几项:
1.开启内存缓存;
2.关闭内存缓存;
它们是成对的!!!
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
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文件

三、缓存的有效时间
缓存要是一直都在的话,那么后台怎么改,前面也不会进行修改,那么就要尽心缓存的有效时间
代码如下:
|
1
2
|
$time = 10; //缓存有效期10秒if(file_exists($filename) && ((filemtime($filename)+$time)>= time()) ) //这是对缓存文件的判断 |
当缓存文件有了并且10秒之后就会重新又没有缓存文件时候的输出####
四、进行分页的缓存
首先是分页的php页面的书写,在上面的更新的php页面中进行再一次修改,如下:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
<?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模板基础----缓存数据的更多相关文章
- smarty模板基础3 *缓存数据*
缓存数据,这个并不是暂存的缓存,而是写入了内存的缓存 通过一个例子来书写:缓存数据 一.书写php和html页面的基本功能 既然是用smarty模板,那么前端和后端要分开写了 (1)php页面 < ...
- smarty模板基础1
smarty模板的作用可以让前端和后端分离(也就是前端的显示页面和后端的php代码). smarty模板的核心是一个类,下载好的模板中有这么几个重要的文件夹 (1)libs核心文件夹(2)int.in ...
- smarty模板基础2
Smarty自带了一些内置函数,这些内置函数是Smarty模板引擎的组成部分.他们被编译成相应的内嵌PHP代码,以获得最大性能. 您创建的自定义函数不能与内置函数同名,也不必修改这些内置函数. 其中一 ...
- smarty模板基础知识
1.定义 Smarty是一个使用php写出来的模板引擎,它分离了逻辑代码和外在的内容,提供了一种易于管理和使用的方法,用来将原本与html代码混杂在一起PHP代码逻辑分离. 简单的讲,目的就是要使PH ...
- smarty模板基础
将前台后台隔离,前台控制显示,后台控制逻辑/内容,与cms类似 原理: 用户访问text.php页面,后台调用类smarty.class.php显示静态模板;
- Smarty模板保留缓存
<?php //缓存 //注:使用缓存需要用到这几个方法: //(ob_start(开启内存缓存); ob_flush(清除内存缓存);) //file_exists这个方法是判断文件是否存在 ...
- smarty模板开发基础总结
前提:1. 部署smarty模板目录:2. 编写Smarty类的子类,定制好template_dir.compile_dir.config_dir.cache_dir.left_delimiter.r ...
- smarty模板引擎(一)基础知识
一.基本概念 1.什么是mvc? mvc是一种开发模式,核心思想是:数据的输入.数据的处理.数据显示的强制分离. 2.什么是smarty? smarty是一个php的模板引擎.更明白的 ...
- Smarty单模板多缓存
Smarty单模板多缓存 单模板多缓存 在生成缓存.判断缓存是否存在时,增加第二个参数,会根据第二个参数来确定对应的缓存文件 清除缓存
随机推荐
- springcloud开篇
微服务作为现在的常用架构,已经到了不学不行的地步.君不见spring官网https://spring.io/已经将springboot,springcloud,spring cloud data fl ...
- python之集合(set)学习
集合(set) 集合是一个无序的不重复元素序列,使用大括号({}).set()函数创建集合, 注意:创建一个空集合必须用set()而不是{},因为{}是用来创建一个空字典. 集合是无序的.不重复的.没 ...
- python 调用c语言函数
虽然python是万能的,但是对于某些特殊功能,需要c语言才能完成.这样,就需要用python来调用c的代码了 具体流程: c编写相关函数 ,编译成库 然后在python中加载这些库,指定调用函数. ...
- 【Hadoop】3、Hadoop-MapReduce使用avro进行数据的序列化与反序列化
package cn.cutter.demo.hadoop.avro; import org.apache.hadoop.io.Text; import java.text.DateFormat; i ...
- sql server 锁与事务拨云见日(上)
一.概述 讲到sql server锁管理时,感觉它是一个大话题,因为它不但重要而且涉及的知识点很多,重点在于要掌握高并发要先要掌握锁与事务,涉及的知识点多它包括各式各样的锁,锁的组合,锁的排斥,锁延伸 ...
- Quartz使用记录总结
Quartz是一个任务调度框架,最近在项目中有用到,所以做个记录总结. 一.主要元素 Scheduler:调度器,控制任务的调度,将JobDetail和Trigger注册到Scheduler加以控制. ...
- 【原创】Python第一章
Python总是从第一行代码开始逐步执行,而C是从main函数开始执行. 在Python中,一切东西都是对象. 在Python中,没有C的花括号,不能任意排版,属于同一个语句块的语句需 ...
- Magicodes.NET框架之路——让Magicodes.NET帮你编写代码
时间总是过得很快,而我几乎没有时间来安安静静的写博客和完善文档.不过总算是框架在一直前进,而我的计划是在今年年底(公历)前,让此框架成熟稳定. 在很长一段时间里,我尝试了很多我之前没有接触的技术或者没 ...
- LeetCode算法扫题系列19
原创作品,可以转载,但是请标注出处地址:https://www.cnblogs.com/V1haoge/p/9104677.html LeetCode算法第19题(难度:中等) 题目:给定一个链表,删 ...
- 翻译:赋值操作符(:=)(已提交到MariaDB官方手册)
本文为mariadb官方手册:赋值操作符(:=)的译文. 原文:https://mariadb.com/kb/en/assignment-operator/ 我提交到MariaDB官方手册的译文:ht ...