简单实用的网站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 文件缓存的性能测试
Apr 25 PHP
PHP常用的文件操作函数经典收藏
Apr 02 PHP
基于php split()函数的用法详解
Jun 05 PHP
php加速器eAccelerator的配置参数、API详解
May 05 PHP
ThinkPHP中limit()使用方法详解
Apr 19 PHP
LINUX下PHP程序实现WORD文件转化为PDF文件的方法
May 13 PHP
JSON两种结构之对象和数组的理解
Jul 19 PHP
深入浅析Yii admin的权限控制
Aug 31 PHP
php-app开发接口加密详解
Apr 18 PHP
PHP实现websocket通信的方法示例
Aug 28 PHP
Smarty模板变量与调节器实例详解
Jul 20 PHP
yii框架结合charjs统计上一年与当前年数据的方法示例
Apr 04 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
Zend studio for eclipse中使php可以调用mysql相关函数的设置方法
2008/10/13 PHP
在PHP中使用curl_init函数的说明
2010/11/02 PHP
php中的mongodb select常用操作代码示例
2014/09/06 PHP
ThinkPHP里用U方法调用js文件实例
2015/06/18 PHP
Thinkphp5结合layer弹窗定制操作结果页面
2017/07/07 PHP
从javascript语言本身谈项目实战
2006/12/27 Javascript
javascritp实现input输入框相关限制用法
2007/06/29 Javascript
Jquery-1.9.1源码分析系列(十一)之DOM操作
2015/11/25 Javascript
Jquery EasyUI实现treegrid上显示checkbox并取选定值的方法
2016/04/29 Javascript
JavaScript组合模式学习要点
2016/08/26 Javascript
javascript实现的图片预览功能
2017/03/25 Javascript
超出JavaScript安全整数限制的数字计算BigInt详解
2018/06/24 Javascript
vuex + axios 做登录验证 并且保存登录状态的实例
2018/09/16 Javascript
Vue表单输入绑定的示例代码
2018/11/01 Javascript
详解Webpack loader 之 file-loader
2018/11/07 Javascript
在vue项目中使用sass语法问题
2019/07/18 Javascript
js如何实现元素曝光上报
2019/08/07 Javascript
vue使用自定义事件的表单输入组件用法详解【日期组件与货币组件】
2020/06/01 Javascript
在阿里云服务器上配置CentOS+Nginx+Python+Flask环境
2016/06/18 Python
Python装饰器实现几类验证功能做法实例
2017/05/18 Python
Linux CentOS7下安装python3 的方法
2018/01/21 Python
Django中Model的使用方法教程
2018/03/07 Python
Python求解任意闭区间的所有素数
2018/06/10 Python
Python数据类型之Set集合实例详解
2019/05/07 Python
python return逻辑判断表达式实现解析
2019/12/02 Python
python隐藏类中属性的3种实现方法
2019/12/19 Python
python numpy生成等差数列、等比数列的实例
2020/02/25 Python
python 获取字典键值对的实现
2020/11/12 Python
详解Html5原生拖拽操作
2018/01/12 HTML / CSS
印度低票价航空公司:GoAir
2017/10/11 全球购物
Flesh Beauty官网:露华浓集团旗下彩妆品牌
2021/02/15 全球购物
医务人员竞聘职务自我评价分享
2013/11/08 职场文书
毕业生的求职信范文分享
2013/12/04 职场文书
年终总结会主持词
2014/03/25 职场文书
南京南京观后感
2015/06/02 职场文书
拔河比赛队名及霸气口号
2015/12/24 职场文书