简单实用的网站PHP缓存类实例


Posted in PHP onJuly 18, 2014

缓存技术在实际使用当中应用非常广泛,可以有效减轻对服务器数据库的访问压力,提高运行速度。目前很多CMS内容管理系统中频繁使用缓存机制来提高系统运行的效率。本文以一个简单实用的缓存类为例,帮助大家参考下缓存的机制与写法。

缓存文件cache.php代码如下:

<?php  
/* 
用户需要事先定义的常量: 
_CachePath_    模板缓存路径 
_CacheEnable_    自动缓存机制是否开启,未定义或为空,表示关闭自动缓存机制 
_ReCacheTime_    自动重新缓存间隔时间,单位为秒,未定义或为空,表示关闭自动重新缓存 
*/  
class cache  
{ 
  var $cachefile;  
  var $cachefilevar;  
  function cache()  
  {  
    //生成当前页的Cache组文件名 $this->cachefilevar 及文件名 $this->cachefile  
    //动态页的参数不同对应的Cache文件也不同,但是每一个动态页的所有Cache文件都有相同的文件名,只是扩展名不同  
    $s=array(".","/");$r=array("_","");  
    $this->cachefilevar=str_replace($s,$r,$_SERVER["SCRIPT_NAME"])."_".$_GET[_ActionVar_];  
    $this->cachefile=$this->cachefilevar.".".md5($_SERVER["REQUEST_URI"]);  
  }  
  //删除当前页/模块的缓存  
  function delete()  
  {  
    //删除当前页的缓存  
    $d = dir(_CachePath_);  
    $strlen=strlen($this->cachefilevar);  
    //返回当前页的所有太原264医院Cache文件组  
    while (false !== ($entry = $d->read()))  
    {  
      if (substr($entry,0,$strlen)==$this->cachefilevar)  
      {  
        if (!unlink(_CachePath_."/".$entry)) {echo "Cache目录无法写入";exit;}  
      }  
    }  
  }  
  //判断是否已Cache过,以及是否需要Cache  
  function check()  
  {  
    //如果设置了缓存更新间隔时间 _ReCacheTime_  
    if (_ReCacheTime_+0>0) 
    {  
      //返回当前页Cache的最后更新时间  
      $var=@file(_CachePath_."/".$this->cachefilevar);$var=$var[0];  
      //如果更新时间超出更新间隔时间则删除Cache文件  
      if (time()-$var>_ReCacheTime_)  
      {  
        $this->delete();$ischage=true;  
      }  
    }  
    //返回当前页的Cache  
    $file=_CachePath_."/".$this->cachefile;  
    //判断当前页Cache是否存在 且 Cache功能是否开启  
    return (file_exists($file) and _CacheEnable_ and !$ischange);  
  }  
  //读取Cache  
  function read()  
  {  
    //返回当前页的Cache  
    $file=_CachePath_."/".$this->cachefile;  
    //读取Cache文件的内容  
    if (_CacheEnable_) return readfile($file);  
    else return false;  
  }  
  //生成Cache  
  function write($output)  
  {  
    //返回当前页的Cache  
    $file=_CachePath_."/".$this->cachefile;  
    //如果Cache功能开启  
    if (_CacheEnable_)  
    {  
      //把输出的内容写入Cache文件  
      $fp=@fopen($file,'w');  
      if (!@fputs($fp,$output)) {echo "模板Cache写入失败";exit;}  
      @fclose($fp);  
      //如果设置了缓存更新间隔时间 _ReCacheTime_  
      if (_ReCacheTime_+0>0)  
      {  
        //更新当前页Cache的最后更新时间  
        $file=_CachePath_."/".$this->cachefilevar;  
        $fp=@fopen($file,'w');  
        if (!@fwrite($fp,time())) {echo "Cache目录无法写入";exit;}  
        @fclose($fp);  
      }  
    }  
  }  
}  
?>

缓存类的使用:

<?php  
  define("_CachePath_","./cache/");  
  define("_CacheEnable_","1");  
  define("_ReCacheTime_","43200");  
  include('cache.php');  
  $cache=new cache();  
  if ($cache->check())  
  {  
    $template=$cache->read();  
  } 
  else  
  {  
    ob_start();  
    ob_implicit_flush(0);  
?>  
  此处为页面内容。。。。  
<?php  
    $template = ob_get_contents();  
    $cache->write($template);  
  }  
?>
PHP 相关文章推荐
php日历[测试通过]
Mar 27 PHP
解析PHP实现下载文件的两种方法
Jul 05 PHP
去除php注释和去除空格函数分享
Mar 13 PHP
分享最受欢迎的5款PHP框架
Nov 27 PHP
Smarty最简单实现列表奇偶变色的方法
Jul 01 PHP
使用PHPCMS搭建wap手机网站
Sep 20 PHP
浅析Yii2 gridview实现批量删除教程
Apr 22 PHP
PHP 将数组打乱 shuffle函数的用法及简单实例
Jun 17 PHP
PHP利用超级全局变量$_POST来接收表单数据的实例
Nov 05 PHP
ThinkPHP5&amp;5.1框架关联模型分页操作示例
Aug 03 PHP
PHP中关于php.ini参数优化详解
Feb 28 PHP
YII2框架中查询生成器Query()的使用方法示例
Mar 18 PHP
ThinkPHP表单自动提交验证实例教程
Jul 18 #PHP
ThinkPHP采用实现三级循环代码实例
Jul 18 #PHP
ThinkPHP字符串函数及常用函数汇总
Jul 18 #PHP
ThinkPHP关于session的操作方法汇总
Jul 18 #PHP
php中实现精确设置session过期时间的方法
Jul 17 #PHP
ThinkPHP跳转页success及error模板实例教程
Jul 17 #PHP
浅谈php安全性需要注意的几点事项
Jul 17 #PHP
You might like
在php和MySql中计算时间差的方法
2011/04/22 PHP
php缩小png图片不损失透明色的解决方法
2013/12/25 PHP
PHP不用递归遍历目录下所有文件的代码
2014/07/04 PHP
Laravel框架实现超简单的分页效果示例
2019/02/08 PHP
怎么让脚本或里面的函数在所有图片都载入完毕的时候执行
2006/10/17 Javascript
jquery select(列表)的操作(取值/赋值)
2009/08/06 Javascript
js中eval详解
2012/03/30 Javascript
jquery实现的简单二级菜单效果代码
2015/09/22 Javascript
最简单的JavaScript图片轮播代码(两种方法)
2015/12/18 Javascript
图文详解Heap Sort堆排序算法及JavaScript的代码实现
2016/05/04 Javascript
js实现百度登录框鼠标拖拽效果
2017/03/07 Javascript
fckeditor部署到weblogic出现xml无法读取及样式不能显示问题的解决方法
2017/03/24 Javascript
uploader秒传图片到服务器完整代码
2017/04/22 Javascript
深入理解Webpack 中路径的配置
2017/06/17 Javascript
jQuery实现的手动拖动控制进度条效果示例【测试可用】
2018/04/18 jQuery
看看“疫苗查询”小程序有温度的代码
2018/07/31 Javascript
vue实现父子组件之间的通信以及兄弟组件的通信功能示例
2019/01/29 Javascript
微信小程序五子棋游戏的悔棋实现方法【附demo源码下载】
2019/02/20 Javascript
解决layer.prompt无效的问题
2019/09/24 Javascript
可拖拽组件slider.js使用方法详解
2020/12/04 Javascript
python3使用requests模块爬取页面内容的实战演练
2017/09/25 Python
Python实现1-9数组形成的结果为100的所有运算式的示例
2017/11/03 Python
python中csv文件的若干读写方法小结
2018/07/04 Python
python实现简单的文字识别
2018/11/27 Python
Python列表常见操作详解(获取,增加,删除,修改,排序等)
2019/02/18 Python
在vscode中配置python环境过程解析
2019/09/28 Python
记录一下scrapy中settings的一些配置小结
2020/09/28 Python
HTML5 文件上传下载的实例代码
2017/07/03 HTML / CSS
泰国办公用品购物网站:OfficeMate
2018/02/04 全球购物
音乐系毕业生自荐信
2013/10/27 职场文书
公司道歉信范文
2014/01/09 职场文书
我的求职计划书
2014/01/10 职场文书
交通事故检查书范文
2014/01/30 职场文书
幼儿园大班评语大全
2014/04/17 职场文书
2014年最新离婚协议书范本
2014/10/11 职场文书
CSS三大特性继承性、层叠性和优先级详解
2022/01/18 HTML / CSS