一个不错的PHP文件页面缓存类

it2025-04-17  5

在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;                    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是高性能的,分布式的内存对象缓存系统,用于在动态应用中减少数据库负载,提升访问速度。

 

转载于:https://www.cnblogs.com/vania/p/3308391.html

最新回复(0)