使用缓存能够让我们的程序访问起来更加快速,缓存可以减少对数据库的操作,体验起来更好一些,对服务器的压力也小一些,当然服务速度很快

php文件执行完之后产生的解析完的数据,保存成静态的网页,下次打开的这个文件的时候,如果发现之前执行过了,就可以把之前保存的静态网页拿出来显示了

它也有个缺点,就是不能时时的与数据库同步

适用范围,一般的小程序都可以用缓存,对时间要求特别苛刻的,比如抢购什么的就不能使用缓存文件了

写缓存文件,

一样要有php文件

php文件还是放在main目录下

相对应的html文件还是写在对应的文件夹下

先把数据库的一系列数据输出一下

php文件中

<?php

$filename = "../cache/huancun.html";
//缓存文件的路径 include("../init.inc.php");
include("../DBDA.php");
$db = new DBDA(); $sql = " select * from nation ";
$arr = $db->Query($sql); $smarty->assign("shuzu",$arr);
$smarty->display("huancun.html");

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>
<h1>数据列表</h1> <table width="100%" 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>
</body>
</html>

运行后数据就显示出来了

所谓的缓存,并不是把我们写的这些代码存下来,审查一下它的源代码

而是把这些保存下来,变成一个静态的,当刷新的时候,直接把已经保存下来的数据直接显示出来,就不再重新访问数据库了,这样节省了很多时间,那如果数据库里面的数据有所变动的话,再走缓存文件就不能把新的数据及时反馈出来了

上面的代码是没有写缓存操作的样子,下面再来做一下缓存操作

html文件中不用修改

php文件中

<?php

$filename = "../cache/huancun.html";
//缓存文件的路径
//判断缓存文件是否存在,如果缓存文件存在直接调用缓存文件,如果缓存文件不
//存在重新缓存
if(file_exists($filename))
{
//直接调用缓存
include($filename);
}
else
{
//重新缓存
ob_start(); //开启内存缓存 include("../init.inc.php");
include("../DBDA.php");
$db = new DBDA(); $sql = " select * from nation ";
$arr = $db->Query($sql); $smarty->assign("shuzu",$arr);
$smarty->display("huancun.html"); $str = ob_get_content(); //获取内存中的缓存内容
file_put_contents($filename,$str); ob_flush(); //关闭内存缓存 echo "#########################";
}

这个一开始运行肯定没有缓存,所以会输出最后的一串井号,再次刷新时就有缓存了,所以直接运行上面的代码,下面的代码就不走了

运行一下,看看效果

再来看一下cache文件夹里面有没有huancun.html文件

然后点开看一下

以静态的方式保存了这张表格

再刷新一下那张表格

刷新后表格下面的一串井号消失了

再刷新后也没有井号

所以走的是缓存文件

我们从数据库改个数据看看效果

改了第一个汉族

然后再刷新一下表格

数据并没有改变

说明缓存文件已经有了,再刷新就只走缓存文件了

再把这个缓存改进一下,只需改php文件就可以

给它加上有效期,每隔十秒重新缓存一次,这样就不会出现数据库改变,数据刷新不出来的结果了

刷新后井号消失

十秒后刷新,原来的缓存文件过期,就会重新缓存一遍,井号就又会出现

这样就是静态缓存的一种方法

分页的话也可以使用

php文件中

<?php
$p=1;
if(!empty($_GET["page"]))
{
$p=$_GET["page"];
}
$filename = "../cache/huancun{$p}.html";
//缓存文件的路径 $time=30; //缓存有效期30秒 //判断缓存文件是否存在,如果缓存文件存在直接调用缓存文件,如果缓存文件不
//存在重新缓存
if(file_exists($filename) && ((filemtime($filename) + $time)>=time()))
{
//直接调用缓存
include($filename);
}
else
{
//重新缓存
ob_start(); //开启内存缓存 include("../init.inc.php");
include("../DBDA.php");
$db = new DBDA(); $sall = "select count(*) from nation";
$zts = $db->StrQuery($sall);
include("../page.class.php");
$page = new Page($zts,5); $sql = " select * from nation ".$page->limit;
$arr = $db->Query($sql); $smarty->assign("fpage",$page->fpage());
$smarty->assign("shuzu",$arr);
$smarty->display("huancun.html"); $str = ob_get_contents(); //获取内存中的缓存内容
file_put_contents($filename,$str); ob_flush(); //关闭内存缓存 echo "#########################";
}

html文件中,只需要输出个分页就好了

然后运行

再点击第二页

第三页四页都可以点击

看一下cache目录下的文件

每个分页的内容都被保存下来了

30秒内刷新走的都是缓存文件

无论分多少页都可以

怎么用php语言来做文件缓存的更多相关文章

  1. 高性能Web服务器Nginx的配置与部署研究(12)应用模块之Memcached做文件缓存时压缩引起的问题

    在上一篇文章中,提到的Nginx的Memcached模块应用场景,主要是作为文件缓存.然后就发现了一个问题,当以字节数组方式缓存较大的文件时,缓存数据会被压缩,从而在读取的时候出现问题. (本文欢迎转 ...

  2. 高性能文件缓存key-value存储—Memcached

    1.高性能文件缓存key-value存储—Redis 2.ASP.NET HttpRuntime.Cache缓存类使用总结 备注:三篇博文结合阅读,简单理解并且使用,如果想深入学习,请多参考文章中给出 ...

  3. c语言的头文件-不是c++类的头文件?

    下面的概述是参考的这篇文章:http://blog.csdn.net/bingxx11/article/details/7771437 c语言编程中也有,也需要头文件, 头文件不只是C++的类才需要! ...

  4. PHP文件缓存与memcached缓存 相比 优缺点是什么呢【总结】

    如果不考虑其他任何问题,只比较速度的话,那肯定是mem快,但他们各有优缺点.文件缓存优点:1.由于现在的硬盘都非常大,所有如果是大数据的时候,放硬盘里就比较合适,比如做一个cms网站,网站里有10万篇 ...

  5. app缓存设计-文件缓存

    采用缓存,可以进一步大大缓解数据交互的压力,又能提供一定的离线浏览.下边我简略列举一下缓存管理的适用环境: 1. 提供网络服务的应用 2. 数据更新不需要实时更新,哪怕是3-5分钟的延迟也是可以采用缓 ...

  6. js文件缓存之版本管理

    以前也做过不少项目,但从来就没有把关注的目光投向过js文件缓存.最近终于在毫无意识的情况下跳进了这个大坑. 近几个月来的工作是一个交易系统持续改进项目,迭代发布周期大约为2~3周.最近一次迭代是V16 ...

  7. iOS 之 文件缓存

    对于信息量不是太大的数据,可以使用文件缓存来处理.文件缓存可以缓存字典和数组. 步骤一:创建路径 路径要一级一级往下创建,基本不用考虑创建失败的情况.但是如果创建失败了要怎么做呢?按道理应该提示出来. ...

  8. C语言检测指定文件是否存在的代码

    内容之余,将做工程过程中比较常用的一些内容片段珍藏起来,下面资料是关于C语言检测指定文件是否存在的内容,希望能对小伙伴们有所用. #include <stdbool.h> #include ...

  9. PHP文件缓存包含三种格式

    http://developer.51cto.com/art/200912/166975.htm PHP文件缓存的速度一直是PHP程序员们关心的问题,他们一直在探讨着如何才能提高PHP文件缓存的效率来 ...

随机推荐

  1. tomcat 安全文件夹(Java之负基础实战)

    tomcat 解析网站的时候,会寻找一个文件叫  WEB-INF 这些文件外部无法访问

  2. PHP新手之学习类与对象(4)

    五.范围解析操作符(::) 范围解析操作符(也可称作 Paamayim Nekudotayim)或者更简单地说是一对冒号,可以用于访问静态成员.方法和常量,还可以用于覆盖类中的成员和方法. 当在类的外 ...

  3. php模式设计之 中介者模式

    中介者模式 中介者模式用于开发一个对象,这个对象能够在类似对象相互之间不直接相互的情况下传送或者调解对这些对象的集合的修改.一般处理具有类似属性,需要保持同步的非耦合对象时,最佳的做法就是中介者模式. ...

  4. TortoiseSVN使用简介(收藏)

    TortoiseSVN使用简介 1.安装及下载client 端 2.什么是SVN(Subversion)? 3.为甚么要用SVN? 4.怎么样在Windows下面建立SVN Repository? 5 ...

  5. ThinkPHP 分组,应用,跳转

    一.多应用配置技巧    在主入口文件index.php同级目录,新建一个 config.php 写入公共的配置项,然后在前后台各自的配置文件config.php中    $arr = include ...

  6. mongoDB查询及游标

    find文档 1.find简介 使用find查询集合中符合条件的子集合 db.test.blog.find(); 类似于sql查询 select * from test.blog 上面的查询是返回多有 ...

  7. window下redis的安装

    1.使用phpinfo()函数查看PHP的版本信息,这会决定扩展文件版本2.根据PHP版本号,编译器版本号和CPU架构,选择php_redis-2.2.5-5.5-ts-vc11-x86.zip和ph ...

  8. Python学习--15 日期和时间

    获取当前时间 # coding: utf-8 from datetime import datetime now = datetime.now() print(now) print(now.strft ...

  9. W3Cschool学习笔记——HTML5基础教程

    HTML5 建立的一些规则: 新特性应该基于 HTML.CSS.DOM 以及 JavaScript. 减少对外部插件的需求(比如 Flash) 更优秀的错误处理 更多取代脚本的标记 HTML5 应该独 ...

  10. W3Cschool学习笔记——HTML基础教程

    什么是 HTML? HTML 是用来描述网页的一种语言. HTML 指的是超文本标记语言 (Hyper Text Markup Language) HTML 不是一种编程语言,而是一种标记语言 (ma ...