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单模板多缓存 单模板多缓存 在生成缓存.判断缓存是否存在时,增加第二个参数,会根据第二个参数来确定对应的缓存文件 清除缓存
随机推荐
- 【雷神源码解析】无基础看懂AAC码流解析,看不懂你打我
一 前言 最近在尝试学习一些视频相关的知识,随便一搜才知道原来国内有雷神这么一个真正神级的人物存在,尤其是在这里(传送门)看到他的感言更是对他膜拜不已,雷神这种无私奉献的精神应当被我辈发扬光大.那写这 ...
- Java 中的 String 真的是不可变吗?
我们都知道 Java 中的 String 类的设计是不可变的,来看下 String 类的源码. public final class String implements java.io.Seriali ...
- 微服务架构下分布式事务解决方案——阿里GTS
1 微服务的发展 微服务倡导将复杂的单体应用拆分为若干个功能简单.松耦合的服务,这样可以降低开发难度.增强扩展性.便于敏捷开发.当前被越来越多的开发者推崇,很多互联网行业巨头.开源社区等都开始了微服务 ...
- JVM源码分析之SystemGC完全解读
JVM源码分析之SystemGC完全解读 概述 JVM的GC一般情况下是JVM本身根据一定的条件触发的,不过我们还是可以做一些人为的触发,比如通过jvmti做强制GC,通过System.gc触发,还可 ...
- leetcode — merge-intervals
import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util. ...
- Python机器学习笔记:XgBoost算法
前言 1,Xgboost简介 Xgboost是Boosting算法的其中一种,Boosting算法的思想是将许多弱分类器集成在一起,形成一个强分类器.因为Xgboost是一种提升树模型,所以它是将许多 ...
- 痞子衡嵌入式:忘掉cmd.exe吧!选用优雅的控制台终端(ConsoleZ)
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是一款优雅的替换cmd的命令行终端ConsoleZ. 1.使用cmd的烦恼 嵌入式开发经常会用到命令行工具,Windows系统自带的com ...
- ZOOKEEPER典型应用场景解析
zookeeper实现了主动通知节点变化,原子创建节点,临时节点,按序创建节点等功能.通过以上功能的组合,zookeeper能够在分布式系统中组合出很多上层功能.下面就看几个常用到的场景,及使用方式和 ...
- wap开发中的cookie
安卓和ios的wap开发,安卓中的cookie可以识别中文,但是ios不能识别,需要转码成通用码(UNICODE),解决办法:直接转成16进制码, escape('测试文字') 友情链接:http:/ ...
- Perl一行式:处理行号和单词数
perl一行式程序系列文章:Perl一行式 所有行的行号 $ perl -pe '$_ = "$. $_"' file.log $ perl -ne 'print "$. ...