缓存
做缓存的目的是为了让程序运行起来更加迅速。因为如果程序访问数据库时数据量较大,执行起来会比较慢。而且每一次刷新页面都会访问依稀数据库,然后再把数据显示在页面上。
设置缓存也有一个缺点,那就是缓存时间要设置好,如果缓存时间较长,那么数据库数据变化时,不能及时的在页面上显示。例如缓存不能用在秒杀商品,或者出售商品上面,因为数量不能及时的更新。
<?php
//缓存文件一般都放在caches文件夹里面。 //定义一个该页面的缓存文件路径,也就是该缓存的文件放在哪个文件夹里面。 $filename = "../cache/testhuancun.html";//定义了一个缓存的文件,文件名为testhuancun.html,位置在../cache文件夹里面。 //设置一个缓存时间
$time = 10;//代表缓存时间设置为10s. //判断缓存文件是否存在
if(!file_exists($filename) || filemtime($filename)+$time<time())
//判断文件是否存在,如果不存在,执行{}里面的代码。还要判断缓存时间有没有过,如果已经过了,要重新读取数据库更新缓存。
//filemtime($filename)读取文件最后被修改的时间,time()取当前时间戳 {
//开启内存缓存
ob_start();//这里开启内存缓存以后,下面要输出的内容全部放在内存缓存里面。 include("../init.inc.php");
include("../DBDA.php");
$db = new DBDA();
$sql = "select * from nation";
$attr = $db->Query($sql);
$smarty->assign("nation",$attr);
$smarty->display("test.html"); //把内存里面的内容读出来
$nr = ob_get_contents();//ob就是代表的缓存,读取的内容就是整个静态页面。 //将读到的内容存放到缓存文件
file_put_contents($filename,$nr);//get是取出内容,put是往里放内容,把内存缓存的文件存到¥filename里面。 //清除内存缓存
ob_flush();//把内存缓存的内容清除掉,不让它们继续留在缓存内存里面,但是需要缓存的内容已经放在了$filename里面了,已经保存下来了。 echo "#############################";//输出内容加上一句话,观察输出内容是输出的缓存页面还是加载数据库的页面。这句话放在了ob_flush后面,不会被清除掉。
}
else//如果缓存文件存在,直接将缓存文件拿到页面显示。
{
include($filename);//将缓存的页面加载到显示页面中
}
?>

下面是test.html文件内容

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
</head> <body>
<table width="100%" border="1" cellpadding="0" cellspacing="0">
<tr>
<td>代号</td>
<td>名称</td>
</tr>
<{foreach $nation as $v}>
<tr>
<td><{$v[0]}></td>
<td><{$v[1]}></td>
</tr>
<{/foreach}>
</table>
</body>
</html>

最新文章

  1. AngularJS的基础元素应用
  2. win8 中使用第三方无线网卡出现无线连接受限解决办法
  3. 边工作边刷题:70天一遍leetcode: day 85-1
  4. php get传递数据
  5. Java 多线程的基本概念
  6. Unity3D游戏开发入门(一)
  7. UVa1606 UVaLive3259 FZU1309 HDU1661 POJ2280 ZOJ2390 Amphiphilic Carbon Molecules
  8. 纯javascript代码编写计算器程序
  9. js相对定位
  10. 200 OK (from cache)原因
  11. swift 导出测试包(Save for Ad Hoc Deployment)卡在compile bitcode处问题
  12. Google Translation Via Python
  13. OOM实例
  14. ngnix 反向代理来解决前端跨域问题
  15. 了解golang的可变参数(... parameters),这一篇就够了
  16. HttpListener通讯成功案例
  17. keras 设置GPU使用率
  18. python3 下列表与字典转换
  19. vue中使用transition标签底部导航闪烁问题
  20. linux-ubuntu14.04以下使用gdb出现的问题

热门文章

  1. 让你少走弯路的搭建树莓派的Net与NodeJS运行环境
  2. 企业号微信支付 公众号支付 H5调起支付API示例代码 JSSDK C# .NET
  3. HTML中使图片居中显示
  4. css权重计算方法浅谈
  5. 2-sql基本操作
  6. 30天的php学习之路——第一天开端
  7. 域普通用户执行金蝶K/3权限不够解决方法
  8. MySQL复制环境(主从/主主)部署总结性梳理
  9. 深入理解JSONP原理——前端面试
  10. 用Tensorflow让神经网络自动创造音乐