帝国CMS模板大全
www.admin99.cn
www.92cms.cn 帝国CMS模板下载站!,情怀,养站,二次开发!源码需求比较大的一站式会员下载,价更省!!!

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

PHP文件页面缓存类

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

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

<?php     
/*      
* 缓存类    cache     
* 作    者:多菜鸟     
* 实    例:     
*/     
/*include( "cache.php" );     
      
$cache = new cache(30);     
$cache->cacheCheck();     
      
echo date("Y-m-d H:i:s");     
      
$cache->caching();  */  
 
class  cache {     
   //缓存目录      
   var   $cacheRoot         =  "./cache/" ;     
   //缓存更新时间秒数,0为不缓存      
   var   $cacheLimitTime    = 3;  
   //缓存文件名      
   var   $cacheFileName     =  "" ;     
   //缓存扩展名      
   var   $cacheFileExt      =  "php" ;     
      
   /*     
   * 构造函数     
   * int $cacheLimitTime 缓存更新时间     
   */     
   function  cache(  $cacheLimitTime  ) {     
     if (  intval (  $cacheLimitTime  ) )      
       $this ->cacheLimitTime =  $cacheLimitTime ;     
     $this ->cacheFileName =  $this ->getCacheFileName();     
    ob_start();     
  }     
       
   /*     
   * 检查缓存文件是否在设置更新时间之内     
   * 返回:如果在更新时间之内则返回文件内容,反之则返回失败     
   */     
   function  cacheCheck(){     
     if (  file_exists (  $this ->cacheFileName ) ) {     
       $cTime  =  $this ->getFileCreateTime(  $this ->cacheFileName );     
       if (  $cTime  +  $this ->cacheLimitTime > time() ) {     
         echo   file_get_contents (  $this ->cacheFileName );     
        ob_end_flush();     
         exit ;     
      }     
    }     
     return  false;     
  }     
      
   /*     
   * 缓存文件或者输出静态     
   * string $staticFileName 静态文件名(含相对路径)     
   */     
   function  caching(  $staticFileName  =  ""  ){     
     if (  $this ->cacheFileName ) {     
       $cacheContent  = ob_get_contents();     
       //echo $cacheContent;      
      ob_end_flush();     
      
       if (  $staticFileName  ) {     
           $this ->saveFile(  $staticFileName ,  $cacheContent  );     
      }     
      
       if (  $this ->cacheLimitTime )     
         $this ->saveFile(  $this ->cacheFileName,  $cacheContent  );     
    }     
  }     
       
   /*     
   * 清除缓存文件     
   * string $fileName 指定文件名(含函数)或者all(全部)     
   * 返回:清除成功返回true,反之返回false     
   */     
   function  clearCache(  $fileName  =  "all"  ) {     
     if (  $fileName  !=  "all"  ) {     
       $fileName  =  $this ->cacheRoot .  strtoupper (md5( $fileName )). "." . $this ->cacheFileExt;     
       if (  file_exists (  $fileName  ) ) {     
         return  @unlink(  $fileName  );     
      } else   return  false;     
    }     
     if  (  is_dir (  $this ->cacheRoot ) ) {     
       if  (  $dir  = @opendir(  $this ->cacheRoot ) ) {     
         while  (  $file  = @readdir(  $dir  ) ) {     
           $check  =  is_dir (  $file  );     
           if  ( ! $check  )     
          @unlink(  $this ->cacheRoot .  $file  );     
        }     
        @ closedir (  $dir  );     
         return  true;     
      } else {     
         return  false;     
      }     
    } else {     
       return  false;     
    }     
  }     
      
   /*     
   * 根据当前动态文件生成缓存文件名     
   */     
   function  getCacheFileName() {     
     return    $this ->cacheRoot .  strtoupper (md5( $_SERVER [ "REQUEST_URI" ])). "." . $this ->cacheFileExt;     
  }     
      
   /*     
   * 缓存文件建立时间     
   * string $fileName   缓存文件名(含相对路径)     
   * 返回:文件生成时间秒数,文件不存在返回0     
   */     
   function  getFileCreateTime(  $fileName  ) {     
     if ( ! trim( $fileName ) )  return  0;     
      
     if (  file_exists (  $fileName  ) ) {      
       return   intval ( filemtime (  $fileName  ));     
    } else   return  0;     
  }     
       
   /*     
   * 保存文件     
   * string $fileName  文件名(含相对路径)     
   * string $text      文件内容     
   * 返回:成功返回ture,失败返回false     
   */     
   function  saveFile( $fileName ,  $text ) {     
     if ( !  $fileName  || !  $text  )  return  false;     
      
     if (  $this ->makeDir( dirname(  $fileName  ) ) ) {     
       if (  $fp  =  fopen (  $fileName ,  "w"  ) ) {     
         if ( @fwrite(  $fp ,  $text  ) ) {     
          fclose( $fp );     
           return  true;     
        } else  {     
          fclose( $fp );     
           return  false;     
        }     
      }     
    }     
     return  false;     
  }     
      
   /*     
   * 连续建目录     
   * string $dir 目录字符串     
   * int $mode   权限数字     
   * 返回:顺利创建或者全部已建返回true,其它方式返回false     
   */     
   function  makeDir(  $dir ,  $mode  =  "0777"  ) {     
     if ( !  $dir  )  return  0;     
     $dir  =  str_replace (  "\", " /",  $dir  );    
        
     $mdir  =  "" ;    
     foreach (  explode (  "/" ,  $dir  )  as   $val  ) {    
       $mdir  .=  $val . "/" ;    
       if (  $val  ==  ".."  ||  $val  ==  "."  || trim(  $val  ) ==  ""  )  continue ;     
        //开源代码phpfensi.com  
       if ( !  file_exists (  $mdir  ) ) {     
         if (!@ mkdir (  $mdir ,  $mode  )){     
          return  false;     
        }     
      }     
    }     
     return  true;     
  }     
}     
?>  

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

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

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

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

赞(0)
版权声明:本文采用知识共享 署名4.0国际许可协议 [BY-NC-SA] 进行授权
文章名称:《PHP文件页面缓存类 - php类库》
文章链接:https://www.admin99.cn/4593
本站资源仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。
QQ站长交流群:953950264

登录

找回密码

注册