一个实用的PHP缓存类

    技术2022-05-11  107

    cache.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);         // 返回当前页的所有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 );        }         ?> 缓存在实际使用当中应用很广泛,可以减轻对服务器数据库的访问,提高运行速度。目前很多CMS内容管理系统中频繁使用缓存机制来提高系统运行的效率。

    最新回复(0)