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

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

一、书写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模板基础----缓存数据的更多相关文章

  1. smarty模板基础3 *缓存数据*

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

  2. smarty模板基础1

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

  3. smarty模板基础2

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

  4. smarty模板基础知识

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

  5. smarty模板基础

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

  6. Smarty模板保留缓存

    <?php //缓存 //注:使用缓存需要用到这几个方法: //(ob_start(开启内存缓存); ob_flush(清除内存缓存);) //file_exists这个方法是判断文件是否存在 ...

  7. smarty模板开发基础总结

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

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

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

  9. Smarty单模板多缓存

    Smarty单模板多缓存 单模板多缓存 在生成缓存.判断缓存是否存在时,增加第二个参数,会根据第二个参数来确定对应的缓存文件 清除缓存

随机推荐

  1. PostgreSQL踩坑现场

    1.PostgreSQL表名.字段名.别名等大小敏感,默认都会转化成小写形式.如果名字中有大写字母,必须分别添加双引号.在写后台时,注意添加\ 如表名:TestTable中有个字段名userName ...

  2. NopCommerce用.net core重写ef

    最近看了NopCommerce源码,用core学习着写了一个项目,修改的地方记录下.项目地址 NopCommerce框架出来好久了.18年的第一季度 懒加载出来后也会全部移动到.net core.那么 ...

  3. preg_replace的一些细节

    .$pattern是数组,$replace也是数组,则中对应的 元素进行替换 php preg_replace有五个参数,有三个是必须参数 Preg_replace(mixed $pattern, m ...

  4. .NetCore外国一些高质量博客分享

    前言 我之前看.netcore一些问题时候,用bing搜索工具搜到了一些外国人的博客.翻看以下,有学习的价值,就分享在这里了. 个人博客 andrewlock.net 最新几篇如下,一看标题就知道很有 ...

  5. MySQL联合索引VS单列索引

    MySQL联合索引VS单列索引 以一个一千万数据量的表格为例 1. 建表建索引 USE foo; DROP TABLE IF EXISTS tmp; CREATE TABLE tmp ( id INT ...

  6. 在 Windows 上可以用 Docker 吗?

    作者:陈计节 个人博客:https://blog.jijiechen.com/post/docker-on-windows/ Docker,或者准确一点说,容器技术,在近几年里几乎成为了应用分发和集群 ...

  7. Linux文件系统及文件属性

    一.Linux文件系统 1.穿件文件系统 Linux中当磁盘格式化创建文件系统时,会创建一定数量的节点索引Inode以及一定数量的块block,其中inode具有存储文件属性以及指向文件实体block ...

  8. 【InfluxDB】InfluxDB学习实践笔记

    InfluxDB是用Go编写的一个开源分布式时序.事件和指标数据库,无需外部依赖.它与Elasticsearch.Graphite等类似.比较适用于与事件紧密相关的数据,例如实时日志数据.实时监控数据 ...

  9. spring boot面试问题集锦

    译文作者:david  原文链接:https://www.javainuse.com/spring/SpringBootInterviewQuestions Q: 什么是spring boot? A: ...

  10. Go实用开源库收集

    框架 https://github.com/go-martini/martini 图形验证码 https://github.com/dchest/captcha ORM https://github. ...