制作缓存的目的是为了让我们的页面运行更加快速,减少读取数据库内容的次数,给用户更好的体验,为此我们可以使自己的程序做一下缓存,并且设置一个缓存过期的时间,来保证与数据库的一致,当然并不是所有的程序都适合做缓存,这里简单介绍一下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静态缓存简单制作的更多相关文章

  1. iOS实用技能扩展-静态库的制作与简单使用

    前言:此文是关于静态库的概念描述,如何制作及简单调试使用,不同版本的说明与场景使用. 1.关于库的简介: 库可以分为2种类型 开源库 公开源代码,能看到具体实现 比如SDWebImage.AFNetw ...

  2. iOS开发中静态库之".framework静态库"的制作及使用篇

    iOS开发中静态库之".framework静态库"的制作及使用篇 .framework静态库支持OC和swift .a静态库如何制作可参照上一篇: iOS开发中静态库之" ...

  3. iOS开发之静态库的制作

    当你需要和别人分享代码,但又不想让别人看到你内部的实现时就需要制作静态库,通常用于第三方SDK 下面就分享一下制作静态库(.a)的过程: 1.打开Xcode,新建workspace 2.随便给work ...

  4. Qt for Windows:Qt 5.4.0 MinGW 静态编译版本制作 (转)

    大致流程: 1.安装Qt(源码版)以及其他必要的环境 2.编译/安装 3.配置 4.使用 ----------正文分割线---------- 1.安装Qt(源码版) 1.1 下载Qt(两个地址二选一即 ...

  5. thinkphp3.2开启静态缓存与缓存规则设置

    网站的静态缓存对大访问量有很好的缓解作用,尤其对网站的大并发,可有效的缓解数据库的压力.在thinkphp中实现静态缓存很简单,thinkphp都已经封装好了直接调用即可. 静态缓存   首先设置 H ...

  6. 最佳 WordPress 静态缓存插件 WP Super Cache 安装和使用(转)

    WP Super Cache 是 WordPress 官方开发人员 Donncha开发,是当前最高效也是最灵活的 WordPress 静态缓存插件.它把整个网页直接生成 HTML 文件,这样 Web ...

  7. iOS 静态库的制作

    按照公司的想法 要开发一款SDK,于是就抽空学习一下静态枯的制作过程. 在IOS中有静态库和动态库的区分,下面我们就来详细介绍一下. 一.静态库和动态库的详细介绍. 我们平时的工程中或多或少都要引入第 ...

  8. ThinkPHP 3.2.3 数据缓存与静态缓存

    ThinkPHP 3.2.3 中手册中数据缓存的地址是:http://www.kancloud.cn/manual/thinkphp/1835 静态缓存的地址是:http://www.kancloud ...

  9. APP 接口开发及读取静态缓存

    <?php /** * Description: App 接口 * Create date:2015-10-19 13:36 * Author: zhaoyingnan **/ class Re ...

随机推荐

  1. Linux的学习笔记

    Linux,1991年,系统安全,良好的可移植性,多用户,多任务,良好的兼容性,良好的用户界面, 主流的是RedHat或者CentOS, CentOS 设置的网关 192.168.2.2 Window ...

  2. Linux下用netstat查看网络状态、端口状态(转)

    转:http://blog.csdn.net/guodongdongnumber1/article/details/11383019 在linux一般使用netstat 来查看系统端口使用情况步.  ...

  3. http协议(十一)http与https

    一.http的缺点 之前有介绍过http协议相关的一些知识,http是相当优秀和方便的,但它也有缺点,主要不足表现在如下几个方面: △ 通信使用明文(不加密),内容可能会被窃听 △ 不验证通信方的身份 ...

  4. Angular2学习笔记——NgModule

    在Angular2中一个Module指的是使用@NgModule修饰的class.@NgModule利用一个元数据对象来告诉Angular如何去编译和运行代码.一个模块内部可以包含组件.指令.管道,并 ...

  5. ECMASCript2015 提案 stage-3的对象展开运算符

    看源码时看到如下的代码 export default { //通过mapActions将actions映射到methods里 methods: { ...mapActions([ 'updateSta ...

  6. Spark2 ML 学习札记

    摘要: 1.pipeline 模式 1.1相关概念 1.2代码示例 2.特征提取,转换以及特征选择 2.1特征提取 2.2特征转换 2.3特征选择 3.模型选择与参数选择 3.1 交叉验证 3.2 训 ...

  7. 前端移动App开发环境搭建

    移动App开发环境安装 一.环境安装准备软件 二.node的安装 像安装普通软件一样,安装对应版本的node软件,安装好之后就可以运行npm命令行,比如npm init .npm install -g ...

  8. 使用python crontab设置linux定时任务

    熟悉linux的朋友应该知道在linux中可以使用crontab设置定时任务.可以通过命令crontab -e编写任务.当然也可以直接写配置文件设置任务. 但是有时候希望通过脚本自动设置,比如我们应用 ...

  9. 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(8)-MVC与EasyUI DataGrid 分页

    系列目录 前言 为了符合后面更新后的重构系统,文章于2016-11-1日重写 EasyUI Datagrid在加载的时候会提交一些分页的信息到后台,我们需要根据这些信息来进行数据分页再次返回到前台 实 ...

  10. SQL Server-简单查询示例(十一)

    前言 本节我们讲讲一些简单查询语句示例以及需要注意的地方,简短的内容,深入的理解,Always to review the basics. EOMONTH 在SQL Server 2012的教程示例中 ...