怎么用php语言来做文件缓存

时间:2023-03-09 06:31:21
怎么用php语言来做文件缓存

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

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>

运行后数据就显示出来了

怎么用php语言来做文件缓存

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

怎么用php语言来做文件缓存

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

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

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 "#########################";
}

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

运行一下,看看效果

怎么用php语言来做文件缓存

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

怎么用php语言来做文件缓存

然后点开看一下

怎么用php语言来做文件缓存

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

再刷新一下那张表格

怎么用php语言来做文件缓存

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

再刷新后也没有井号

所以走的是缓存文件

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

怎么用php语言来做文件缓存

改了第一个汉族

然后再刷新一下表格

怎么用php语言来做文件缓存

数据并没有改变

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

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

怎么用php语言来做文件缓存

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

怎么用php语言来做文件缓存

刷新后井号消失

怎么用php语言来做文件缓存

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

怎么用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文件中,只需要输出个分页就好了

怎么用php语言来做文件缓存

然后运行

怎么用php语言来做文件缓存

再点击第二页

怎么用php语言来做文件缓存

第三页四页都可以点击

看一下cache目录下的文件

怎么用php语言来做文件缓存

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

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

无论分多少页都可以