当前位置:首页 > PHP教程 > php类库 > 列表

PHP实现的简单缓存类

发布:smiling 来源: PHP粉丝网  添加日期:2021-06-14 22:06:55 浏览: 评论:0 

这篇文章主要介绍了PHP实现的简单缓存类,实例分析了php缓存文件的定义及使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下。

本文实例讲述了PHP实现的简单缓存类,分享给大家供大家参考,具体如下:

cache.inc.php:

  1. <?php 
  2. class Cache { 
  3.   /** 
  4.   * $dir : 缓存文件存放目录 
  5.   * $lifetime : 缓存文件有效期,单位为秒 
  6.   * $cacheid : 缓存文件路径,包含文件名 
  7.   * $ext : 缓存文件扩展名(可以不用),这里使用是为了查看文件方便 
  8.   */ 
  9.   private $dir
  10.   private $lifetime
  11.   private $cacheid
  12.   private $ext
  13.   /** 
  14.   * 析构函数,检查缓存目录是否有效,默认赋值 
  15.   */ 
  16.   function __construct($dir='',$lifetime=1800) { 
  17.     if ($this->dir_isvalid($dir)) { 
  18.       $this->dir = $dir
  19.       $this->lifetime = $lifetime
  20.       $this->ext = '.Php'
  21.       $this->cacheid = $this->getcacheid(); 
  22.     } 
  23.   } 
  24.   /** 
  25.   * 检查缓存是否有效 
  26.   */ 
  27.   private function isvalid() { 
  28.     if (!file_exists($this->cacheid)) return false; 
  29.     if (!(@$mtime = filemtime($this->cacheid))) return false; 
  30.     if (mktime() - $mtime > $this->lifetime) return false; 
  31.     return true; 
  32.   } 
  33.   /** 
  34.   * 写入缓存 
  35.   * $mode == 0 , 以浏览器缓存的方式取得页面内容 
  36.   * $mode == 1 , 以直接赋值(通过$content参数接收)的方式取得页面内容 
  37.   * $mode == 2 , 以本地读取(fopen ile_get_contents)的方式取得页面内容(似乎这种方式没什么必要) 
  38.   */ 
  39.   public function write($mode=0,$content='') { 
  40.     switch ($mode) { 
  41.       case 0: 
  42.         $content = ob_get_contents(); 
  43.         break
  44.       default
  45.         break
  46.     } 
  47.     ob_end_flush(); 
  48.     try { 
  49.       file_put_contents($this->cacheid,$content); 
  50.     } 
  51.     catch (Exception $e) { 
  52.       $this->error('写入缓存失败!请检查目录权限!'); 
  53.     } 
  54.   } 
  55.   /** 
  56.   * 加载缓存 
  57.   * exit() 载入缓存后终止原页面程序的执行,缓存无效则运行原页面程序生成缓存 
  58.   * ob_start() 开启浏览器缓存用于在页面结尾处取得页面内容 
  59.   */ 
  60.   public function load() { 
  61.     if ($this->isvalid()) { 
  62.       echo "<span style='display:none;'>This is Cache.</span> "
  63.       //以下两种方式,哪种方式好????? 
  64.       require_once($this->cacheid); 
  65.       //echo file_get_contents($this->cacheid); 
  66.       exit(); 
  67.     } 
  68.     else { 
  69.       ob_start(); 
  70.     } 
  71.   } 
  72.   /** 
  73.   * 清除缓存 
  74.   */ 
  75.   public function clean() { 
  76.     try { 
  77.       unlink($this->cacheid); 
  78.     } 
  79.     catch (Exception $e) { 
  80.       $this->error('清除缓存文件失败!请检查目录权限!'); 
  81.     } 
  82.   } 
  83.   /** 
  84.   * 取得缓存文件路径 
  85.   */ 
  86.   private function getcacheid() { 
  87.     return $this->dir.md5($this->geturl()).$this->ext; 
  88.   } 
  89.   /** 
  90.   * 检查目录是否存在或是否可创建 
  91.   */ 
  92.   private function dir_isvalid($dir) { 
  93.     if (is_dir($dir)) return true; 
  94.     try { 
  95.       mkdir($dir,0777); 
  96.     } 
  97.     catch (Exception $e) { 
  98.        $this->error('所设定缓存目录不存在并且创建失败!请检查目录权限!'); 
  99.        return false;       
  100.     } 
  101.     return true; 
  102.   } 
  103.   /** 
  104.   * 取得当前页面完整url 
  105.   */ 
  106.   private function geturl() { 
  107.     $url = ''
  108.     if (isset($_SERVER['REQUEST_URI'])) { 
  109.       $url = $_SERVER['REQUEST_URI']; 
  110.     } 
  111.     else { 
  112.       $url = $_SERVER['Php_SELF']; 
  113.       $url .= emptyempty($_SERVER['QUERY_STRING'])?'':'?'.$_SERVER['QUERY_STRING']; 
  114.     } 
  115.     return $url
  116.   } 
  117.   /** 
  118.   * 输出错误信息 
  119.   */ 
  120.   private function error($str) { 
  121.     echo '<div style="color:red;">'.$str.'</div>'
  122.   } 
  123. ?> 

demo.php:

  1. <?php 
  2. /* 
  3. * 可自由转载使用,请保留版权信息,谢谢使用! 
  4. * Class Name : Cache (For Php5) 
  5. * Version : 1.0 
  6. * Description : 动态缓存类,用于控制页面自动生成缓存、调用缓存、更新缓存、删除缓存. 
  7. * Last Modify : 2007-8-22 
  8. * Remark : 
  9.  1.此版本为Php5版本,本人暂没有写Php4的版本,如需要请自行参考修改(比较容易啦,不要那么懒嘛,呵呵!). 
  10.  2.此版本为utf-8编码,如果网站采用其它编码请自行转换,Windows系统用记事本打开另存为,选择相应编码即可(一般ANSI),Linux下请使用相应编辑软件或iconv命令行. 
  11.  3.拷贝粘贴的就不用管上面第2条了. 
  12. * 关于缓存的一点感想: 
  13. * 动态缓存和静态缓存的根本差别在于其是自动的,用户访问页面过程就是生成缓存、浏览缓存、更新缓存的过程,无需人工操作干预. 
  14. * 静态缓存指的就是生成静态页面,相关操作一般是在网站后台完成,需人工操作(也就是手动生成). 
  15. */ 
  16. /* 
  17. * 使用方法举例*/ 
  18. //Demo1: 
  19.   require_once('cache.inc.php'); 
  20.   $cachedir = './Cache/'//设定缓存目录 
  21.   $cache = new Cache($cachedir,10); //省略参数即采用缺省设置, $cache = new Cache($cachedir); 
  22.   if ($_GET['cacheact'] != 'rewrite'//此处为一技巧,通过xx.Php?cacheact=rewrite更新缓存,以此类推,还可以设定一些其它操作 
  23.     $cache->load(); //装载缓存,缓存有效则不执行以下页面代码 
  24.   //页面代码开始 
  25.   echo date('H:i:s jS F'); 
  26.   //页面代码结束 
  27.   $cache->write(); //首次运行或缓存过期,生成缓存 
  28. //Demo2: 
  29.   require_once('cache.inc.php'); 
  30.   $cachedir = './Cache/'//设定缓存目录 
  31.   $cache = new Cache($cachedir,10); //省略参数即采用缺省设置, $cache = new Cache($cachedir); 
  32.   if ($_GET['cacheact'] != 'rewrite'//此处为一技巧,通过xx.Php?cacheact=rewrite更新缓存,以此类推,还可以设定一些其它操作 
  33.     $cache->load(); //装载缓存,缓存有效则不执行以下页面代码 
  34.   //页面代码开始 
  35.   $content = date('H:i:s jS F'); 
  36.   echo $content
  37.   //页面代码结束 
  38.   $cache->write(1,$content); //首次运行或缓存过期,生成缓存 
  39. //Demo3: 
  40.   require_once('cache.inc.php'); 
  41.   define('CACHEENABLE',true); 
  42.   if (CACHEENABLE) { 
  43.     $cachedir = './Cache/'//设定缓存目录 
  44.     $cache = new Cache($cachedir,10); //省略参数即采用缺省设置, $cache = new Cache($cachedir); 
  45.     if ($_GET['cacheact'] != 'rewrite'//此处为一技巧,通过xx.Php?cacheact=rewrite更新缓存,以此类推,还可以设定一些其它操作 
  46.       $cache->load(); //装载缓存,缓存有效则不执行以下页面代码   
  47.   } 
  48.   //页面代码开始 
  49.   $content = date('H:i:s jS F'); 
  50.   echo $content
  51.   //页面代码结束 
  52.   if (CACHEENABLE) 
  53.     $cache->write(1,$content); //首次运行或缓存过期,生成缓存 
  54. ?> 

希望本文所述对大家的php程序设计有所帮助。

Tags: PHP缓存类

分享到: