php静态缓存简单制作
制作缓存的目的是为了让我们的页面运行更加快速,减少读取数据库内容的次数,给用户更好的体验,为此我们可以使自己的程序做一下缓存,并且设置一个缓存过期的时间,来保证与数据库的一致,当然并不是所有的程序都适合做缓存,这里简单介绍一下php静态缓存制作的方法:
1.首先我们要定好一个缓存文件存放的位置,即存放目录(李昌辉)
例如我这里存放在cache目录下,将来所有的缓存文件都放到该目录下

2.在要做静态缓存的页面,我们定义一个变量来存放一个缓存文件的路径(相对于当前页面的路径)
$filename = "./cache/test.html";
3.定义一个变量来存储缓存过期时间
$cachetime = 5;
4.判断一下,缓存文件是否存在或者是否过期,如果缓存文件不存在就执行源代码生成缓存,或者时间过期了也应该重新缓存一下,如果上述条件不满足则调用缓存页面显示。
if(!file_exists($filename) || filemtime($filename)+$cachetime<time())
{
//缓存页面代码
}
else
{
include($filename);//如果存在,调用缓存文件
}
5.生成缓存,在页面输出内容之前,我们调用ob_start()方法打开内存缓冲区,将要输出的内容放到内存里面。
ob_start();
6.在页面输出完之后,将内存中获取到的内容保存下来,存为一个静态页面。
//从内存缓存中获取页面代码
$content = ob_get_contents(); //将获取到的内容存放到缓存文件
file_put_contents($filename,$content); //清掉内存缓存
ob_flush();
7.最后我们加上一段输出,来测试是否重新缓存了,如果页面有输出该内容代表重新生成了缓存文件,如果没有,说明是直接读的缓存文件
echo "######################################"; //测试是否调用了缓存文件,缓存文件不输出这句话
这样我们就简单做了一个静态缓存,完整代码如下:
<?php
$filename = "./cache/test.html"; //定义缓存有效期
$cachetime = 5; //判断缓存文件是否存在
if(!file_exists($filename) || filemtime($filename)+$cachetime<time()) //filemtime($filename)获取文件修改时间,加上定义的缓存时间小于当前时间
{
//开启内存缓存
ob_start(); ?>
<!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> <h1>水果信息表</h1>
<table width="100%" border="1" cellpadding="0" cellspacing="0" >
<tr>
<td>代号</td>
<td>名称</td>
<td>价格</td>
<td>产地</td>
<td>库存</td>
<td>操作</td>
</tr> <?php
//造连接对象
$db = new MySQLi("localhost","root","123","mydb");
//写SQL语句
$sql = "select * from fruit"; //执行
$result = $db->query($sql); //取数据
/*$attr = $result->fetch_all(); foreach($attr as $v)
{
echo "<tr><td>{$v[0]}</td><td>{$v[1]}</td><td>{$v[2]}</td><td>{$v[3]}</td><td>{$v[4]}</td></tr>";
}*/ while($attr = $result->fetch_row())
{
echo "<tr><td>{$attr[0]}</td><td>{$attr[1]}</td><td>{$attr[2]}</td><td>{$attr[3]}</td><td>{$attr[4]}</td><td> <a href='shanchu.php?code={$attr[0]}' onclick=\"return confirm('确定删除么')\">
删除
</a>
<a href='xiugai.php?code={$attr[0]}'>修改</a>
</td></tr>";
} ?> </table>
<a href="add.php">添加数据</a> </body>
</html> <?php
//从内存缓存中获取页面代码
$content = ob_get_contents(); //将获取到的内容存放到缓存文件
file_put_contents($filename,$content); //清掉内存缓存
ob_flush(); echo "######################################"; //测试是否调用了缓存文件,缓存文件不输出这句话 }
else
{
include($filename); //如果存在,调用缓存文件
} ?>
最后来看一下,效果:
第一次执行该页面,出现缓存:


再次执行,则没有重新建立缓存,而是直接读取的静态页面test.html:

过了一段时间,又重新生成了缓存,这个时间就是我们之前设置的缓存过期时间。
php静态缓存简单制作的更多相关文章
- iOS实用技能扩展-静态库的制作与简单使用
前言:此文是关于静态库的概念描述,如何制作及简单调试使用,不同版本的说明与场景使用. 1.关于库的简介: 库可以分为2种类型 开源库 公开源代码,能看到具体实现 比如SDWebImage.AFNetw ...
- iOS开发中静态库之".framework静态库"的制作及使用篇
iOS开发中静态库之".framework静态库"的制作及使用篇 .framework静态库支持OC和swift .a静态库如何制作可参照上一篇: iOS开发中静态库之" ...
- iOS开发之静态库的制作
当你需要和别人分享代码,但又不想让别人看到你内部的实现时就需要制作静态库,通常用于第三方SDK 下面就分享一下制作静态库(.a)的过程: 1.打开Xcode,新建workspace 2.随便给work ...
- Qt for Windows:Qt 5.4.0 MinGW 静态编译版本制作 (转)
大致流程: 1.安装Qt(源码版)以及其他必要的环境 2.编译/安装 3.配置 4.使用 ----------正文分割线---------- 1.安装Qt(源码版) 1.1 下载Qt(两个地址二选一即 ...
- thinkphp3.2开启静态缓存与缓存规则设置
网站的静态缓存对大访问量有很好的缓解作用,尤其对网站的大并发,可有效的缓解数据库的压力.在thinkphp中实现静态缓存很简单,thinkphp都已经封装好了直接调用即可. 静态缓存 首先设置 H ...
- 最佳 WordPress 静态缓存插件 WP Super Cache 安装和使用(转)
WP Super Cache 是 WordPress 官方开发人员 Donncha开发,是当前最高效也是最灵活的 WordPress 静态缓存插件.它把整个网页直接生成 HTML 文件,这样 Web ...
- iOS 静态库的制作
按照公司的想法 要开发一款SDK,于是就抽空学习一下静态枯的制作过程. 在IOS中有静态库和动态库的区分,下面我们就来详细介绍一下. 一.静态库和动态库的详细介绍. 我们平时的工程中或多或少都要引入第 ...
- ThinkPHP 3.2.3 数据缓存与静态缓存
ThinkPHP 3.2.3 中手册中数据缓存的地址是:http://www.kancloud.cn/manual/thinkphp/1835 静态缓存的地址是:http://www.kancloud ...
- APP 接口开发及读取静态缓存
<?php /** * Description: App 接口 * Create date:2015-10-19 13:36 * Author: zhaoyingnan **/ class Re ...
随机推荐
- ExecuteOrDelayUntilScriptLoaded 还是 SP.SOD.executeFunc?
SharePoint 客户端 JS 开发时,要等待 SharePoint 对象都加载完毕再调用自己的方法(myFunction),可以有两种方式: ExecuteOrDelayUntilScriptL ...
- 使用四元数解决万向节锁(Gimbal Lock)问题
问题 使用四元数可以解决万向节锁的问题,但是我在实际使用中出现问题:我设计了一个程序,显示一个三维物体,用户可以输入绕zyx三个轴进行旋转的指令,物体进行相应的转动. 由于用户输入的是绕三个轴旋转的角 ...
- Linux.NET学习手记(6)
各位读者大家好,好长一段时间没有更新文章了,自从参加工作之后,每天等待去做的工作没完没了,个人的时间也变得奢侈起来,今后要尽量从中脱身,抽更多的时间来完成自己想做的事情(希望如此). 言归正传,上一回 ...
- mono for android学习过程系列教程(4)
今天要讲的事情是构建安卓程序的UI界面. 首先给大家上点小点心,如图: 上面就是我们界面的设计模块,仔细看中间大块的下方,有一个Source,这就类似webform里面的设计和源代码界面. 在这个页面 ...
- MonoDevelop 4.2.2/Mono 3.4.0 in CentOS 6.5 安装笔记
MonoDevelop 4.2.2/Mono 3.4.0 in CentOS 6.5 安装笔记 说明 以root账户登录Linux操作系统,注意:本文中的所有命令行前面的 #> 表示命令行提示符 ...
- Xamarin.Android活动的生命周期
一.前言 用过Android手机的人一定会发现一种现象,当你把一个应用置于后台后,一段时间之后在打开就会发现应用重新打开了,但是之前的相关的数据却没有丢失.可以看出app的“生命”是掌握在系统手上的, ...
- ABP理论之CSRF
返回总目录 本篇目录 介绍 ASP.NET MVC ASP.NET WEB API ASP.NET Core[以后补上] 客户端类库 内部原理 介绍 CSRF[Cross-Site Request F ...
- 2000条你应知的WPF小姿势 基础篇<57-62 依赖属性进阶>
在正文开始之前需要介绍一个人:Sean Sexton. 来自明尼苏达双城的软件工程师.最为出色的是他维护了两个博客:2,000ThingsYou Should Know About C# 和 2,00 ...
- Marmoset Toolbag中的角色布光技巧 by Joe”EarthQuake”Wilson
Sagat by Tim “spacemonkey” Appleby 有言在先 首先,我要感谢才华横溢的Tim“spacemonkey Appleby允许本教程中使用他那个极其NB的Sagat模型.不 ...
- 自学MVC看这里——全网最全ASP.NET MVC 教程汇总
MVC架构已深得人心,微软也不甘落后,推出了Asp.net MVC.小编特意整理博客园乃至整个网络最具价值的MVC技术原创文章,为想要学习ASP.NET MVC技术的学习者提供一个整合学习入口.本文从 ...