网站地图    收藏   

主页 > php专栏 > php类库 >

PHP文件页面缓存类 - php类库

来源:自学PHP网    时间:2014-11-30 12:53 作者: 阅读:

[导读] 在php中缓存分类数据库缓存,文件缓存和内存缓存,下面我来给各位同学详细介绍PHP文件缓存类实现代码,有需要了解的朋友可参考.一个不错的PHP文件页面缓存类代码如下:?php/**缓存类cach...

PHP文件页面缓存类

在php中缓存分类数据库缓存,文件缓存和内存缓存,下面我来给各位同学详细介绍PHP文件缓存类实现代码,有需要了解的朋友可参考.

一个不错的PHP文件页面缓存类代码如下:

  1. <?php     
  2. /*     
  3. * 缓存类    cache    
  4. * 作    者:多菜鸟    
  5. * 实    例:    
  6. */    
  7. /*include( "cache.php" );    
  8.      
  9. $cache = new cache(30);    
  10. $cache->cacheCheck();    
  11.      
  12. echo date("Y-m-d H:i:s");    
  13.      
  14. $cache->caching();  */ 
  15.  
  16. class cache {     
  17.   //缓存目录     
  18.   var $cacheRoot        = "./cache/";     
  19.   //缓存更新时间秒数,0为不缓存     
  20.   var $cacheLimitTime   = 3;  
  21.   //缓存文件名     
  22.   var $cacheFileName    = "";     
  23.   //缓存扩展名     
  24.   var $cacheFileExt     = "php";     
  25.       
  26.   /*    
  27.    * 构造函数    
  28.    * int $cacheLimitTime 缓存更新时间    
  29.    */    
  30.   function cache( $cacheLimitTime ) {     
  31.     ifintval$cacheLimitTime ) )      
  32.       $this->cacheLimitTime = $cacheLimitTime;     
  33.     $this->cacheFileName = $this->getCacheFileName();     
  34.     ob_start();     
  35.   }     
  36.        
  37.   /*    
  38.    * 检查缓存文件是否在设置更新时间之内    
  39.    * 返回:如果在更新时间之内则返回文件内容,反之则返回失败    
  40.    */    
  41.   function cacheCheck(){     
  42.     iffile_exists$this->cacheFileName ) ) {     
  43.       $cTime = $this->getFileCreateTime( $this->cacheFileName );     
  44.       if$cTime + $this->cacheLimitTime > time() ) {     
  45.         echo file_get_contents$this->cacheFileName );     
  46.         ob_end_flush();     
  47.         exit;     
  48.       }     
  49.     }     
  50.     return false;     
  51.   }     
  52.       
  53.   /*    
  54.    * 缓存文件或者输出静态    
  55.    * string $staticFileName 静态文件名(含相对路径)    
  56.    */    
  57.   function caching( $staticFileName = "" ){     
  58.     if$this->cacheFileName ) {     
  59.       $cacheContent = ob_get_contents();     
  60.       //echo $cacheContent;     
  61.       ob_end_flush();     
  62.       
  63.       if$staticFileName ) {     
  64.           $this->saveFile( $staticFileName$cacheContent );     
  65.       }     
  66.       
  67.       if$this->cacheLimitTime )     
  68.         $this->saveFile( $this->cacheFileName, $cacheContent );     
  69.     }     
  70.   }     
  71.        
  72.   /*    
  73.    * 清除缓存文件    
  74.    * string $fileName 指定文件名(含函数)或者all(全部)    
  75.    * 返回:清除成功返回true,反之返回false    
  76.    */    
  77.   function clearCache( $fileName = "all" ) {     
  78.     if$fileName != "all" ) {     
  79.       $fileName = $this->cacheRoot . strtoupper(md5($fileName)).".".$this->cacheFileExt;     
  80.       iffile_exists$fileName ) ) {     
  81.         return @unlink( $fileName );     
  82.       }else return false;     
  83.     }     
  84.     if ( is_dir$this->cacheRoot ) ) {     
  85.       if ( $dir = @opendir( $this->cacheRoot ) ) {     
  86.         while ( $file = @readdir( $dir ) ) {     
  87.           $check = is_dir$file );     
  88.           if ( !$check )     
  89.           @unlink( $this->cacheRoot . $file );     
  90.         }     
  91.         @closedir$dir );     
  92.         return true;     
  93.       }else{     
  94.         return false;     
  95.       }     
  96.     }else{     
  97.       return false;     
  98.     }     
  99.   }     
  100.       
  101.   /*    
  102.    * 根据当前动态文件生成缓存文件名    
  103.    */    
  104.   function getCacheFileName() {     
  105.     return  $this->cacheRoot . strtoupper(md5($_SERVER["REQUEST_URI"])).".".$this->cacheFileExt;     
  106.   }     
  107.       
  108.   /*    
  109.    * 缓存文件建立时间    
  110.    * string $fileName   缓存文件名(含相对路径)    
  111.    * 返回:文件生成时间秒数,文件不存在返回0    
  112.    */    
  113.   function getFileCreateTime( $fileName ) {     
  114.     if( ! trim($fileName) ) return 0;     
  115.       
  116.     iffile_exists$fileName ) ) {      
  117.       return intval(filemtime$fileName ));     
  118.     }else return 0;     
  119.   }     
  120.        
  121.   /*    
  122.    * 保存文件    
  123.    * string $fileName  文件名(含相对路径)    
  124.    * string $text      文件内容    
  125.    * 返回:成功返回ture,失败返回false    
  126.    */    
  127.   function saveFile($fileName$text) {     
  128.     if( ! $fileName || ! $text ) return false;     
  129.       
  130.     if$this->makeDir( dirname( $fileName ) ) ) {     
  131.       if$fp = fopen$fileName"w" ) ) {     
  132.         if( @fwrite( $fp$text ) ) {     
  133.           fclose($fp);     
  134.           return true;     
  135.         }else {     
  136.           fclose($fp);     
  137.           return false;     
  138.         }     
  139.       }     
  140.     }     
  141.     return false;     
  142.   }     
  143.       
  144.   /*    
  145.    * 连续建目录    
  146.    * string $dir 目录字符串    
  147.    * int $mode   权限数字    
  148.    * 返回:顺利创建或者全部已建返回true,其它方式返回false    
  149.    */    
  150.   function makeDir( $dir$mode = "0777" ) {     
  151.     if( ! $dir ) return 0;     
  152.     $dir = str_replace"\", "/", $dir );    
  153.         
  154.     $mdir = "";    
  155.     foreachexplode"/"$dir ) as $val ) {    
  156.       $mdir .= $val."/";    
  157.       if$val == ".." || $val == "." || trim( $val ) == "" ) continue;     
  158.        //开源代码phpfensi.com 
  159.       if( ! file_exists$mdir ) ) {     
  160.         if(!@mkdir$mdir$mode )){     
  161.          return false;     
  162.         }     
  163.       }     
  164.     }     
  165.     return true;     
  166.   }     
  167. }     
  168. ?>  

上面使用算是页面缓存了,每次访问页面的时候,都会先检测相应的缓存页面文件是否存在,如果不存在,就连接数据库,得到数据,显示页面并同时生成缓存页面文件,这样下次访问的时候页面文件就发挥作用了,模板引擎和网上常见的一些缓存类通常有此功能.

给大家介绍一个Memcache缓存了,算是内存缓存了,代码如下:

  1. <?php 
  2. $memcache = new Memcache; 
  3. $memcache->connect('localhost', 11211) or die ("Could not connect"); 
  4. $version = $memcache->getVersion(); 
  5. echo "Server's version: ".$version."n"
  6. $tmp_object = new stdClass; 
  7. $tmp_object->str_attr = 'test'
  8. $tmp_object->int_attr = 123; 
  9. $memcache->set('key'$tmp_object, false, 10) or die ("Failed to save data at the server"); 
  10. echo "Store data in the cache (data will expire in 10 seconds)n"
  11. $get_result = $memcache->get('key'); 
  12. echo "Data from the cache:n"
  13. var_dump($get_result); 
  14. ?> 

Memcached是高性能的,分布式的内存对象缓存系统,用于在动态应用中减少数据库负载,提升访问速度.

自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习

京ICP备14009008号-1@版权所有www.zixuephp.com

网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com

添加评论