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

  • 相关阅读:
    iOS 定位服务、通讯录、日历、提醒事项、照片、蓝牙共享、麦克风、相机等授权检测
    App项目升级Xcode7&iOS9(续)
    iOS 9之3D Touch
    iOS项目更新之升级Xcode7 & iOS9
    Android 5.0 之SwipeRefreshLayout
    Xcode7真机调试iOS应用程序
    iOS 9之WatchKit for WatchOS 2
    iOS 9之Shared Links Extension(Safari Extensibility)
    iOS多线程的初步研究(十)-- dispatch同步
    iOS多线程的初步研究(九)-- dispatch源
  • 原文地址:https://www.cnblogs.com/vania/p/3308391.html
Copyright © 2020-2023  润新知