加入收藏 | 设为首页 | 会员中心 | 我要投稿 我爱故事小小网_铜陵站长网 (http://www.0562zz.com/)- 视频终端、云渲染、应用安全、数据安全、安全管理!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php文件缓存方法概况

发布时间:2022-08-25 13:30:35 所属栏目:PHP教程 来源:互联网
导读:这篇文章主要为大家详细介绍了php文件缓存方法,内容如很详细,感兴趣的小伙伴们可以参考一下,为大家分享很全的php文件缓存,供大家参考,具体内容如下。 ?php class cache { private static $_instance = null; protected $_options = array( cache_dir =
  这篇文章主要为大家详细介绍了php文件缓存方法,内容如很详细,感兴趣的小伙伴们可以参考一下,为大家分享很全的php文件缓存,供大家参考,具体内容如下。
 
  <?php  
  class cache
  {  
   private static $_instance = null;
   
   protected $_options = array(
    'cache_dir'  => "./",
    'file_name_prefix' => 'cache',
    'mode'   => '1', //mode 1 为serialize model 2为保存为可执行文件
   );  
     
   /**
    * 得到本类实例
    *  
    * @return Ambiguous
    */
   public static function getInstance()
   {
    if(self::$_instance === null)
    {
     self::$_instance = new self();
    }
    return self::$_instance;
   }  
     
   /**
    * 得到缓存信息
    *  
    * @param string $id
    * @return boolean|array
    */
   public static function get($id)
   {
    $instance = self::getInstance();
      
    //缓存文件不存在
    if(!$instance->has($id))
    {
     return false;
    }
      
    $file = $instance->_file($id);
      
    $data = $instance->_fileGetContents($file);
      
    if($data['expire'] == 0 || time() < $data['expire'])
    {
     return $data['contents'];
    }
    return false;
   }
     
   /**
    * 设置一个缓存
    *  
    * @param string $id 缓存id
    * @param array $data 缓存内容
    * @param int $cacheLife 缓存生命 默认为0无限生命
    */
   public static function set($id, $data, $cacheLife = 0)
   {
    $instance = self::getInstance();
      
    $time = time();
    $cache   = array();
    $cache['contents'] = $data;
    $cache['expire'] = $cacheLife === 0 ? 0 : $time + $cacheLife;
    $cache['mtime'] = $time;
      
    $file = $instance->_file($id);
      
    return $instance->_filePutContents($file, $cache);
   }
     
   /**
    * 清除一条缓存
    *  
    * @param string cache id   
    * @return void
    */
   public static function delete($id)
   {
    $instance = self::getInstance();
      
    if(!$instance->has($id))
    {
     return false;
    }
    $file = $instance->_file($id);
    //删除该缓存
    return unlink($file);
   }
     
   /**
    * 判断缓存是否存在
    *  
    * @param string $id cache_id
    * @return boolean true 缓存存在 false 缓存不存在
    */
   public static function has($id)
   {
    $instance = self::getInstance();
    $file  = $instance->_file($id);
      
    if(!is_file($file))
    {
     return false;
    }
    return true;
   }
     
   /**
    * 通过缓存id得到缓存信息路径
    * @param string $id
    * @return string 缓存文件路径
    */
   protected function _file($id)
   {
    $instance = self::getInstance();
    $fileNmae = $instance->_idToFileName($id);
    return $instance->_options['cache_dir'] . $fileNmae;
   }  
     
   /**
    * 通过id得到缓存信息存储文件名
    *  
    * @param $id
    * @return string 缓存文件名
    */
   protected function _idToFileName($id)
   {
    $instance = self::getInstance();
    $prefix = $instance->_options['file_name_prefix'];
    return $prefix . '---' . $id;
   }
     
   /**
    * 通过filename得到缓存id
    *  
    * @param $id
    * @return string 缓存id
    */
   protected function _fileNameToId($fileName)
   {
    $instance = self::getInstance();
    $prefix = $instance->_options['file_name_prefix'];
    return preg_replace('/^' . $prefix . '---(.*)$/', '$1', $fileName);
   }
     
   /**
    * 把数据写入文件
    *  
    * @param string $file 文件名称
    * @param array $contents 数据内容
    * @return bool  
    */
   protected function _filePutContents($file, $contents)
   {
    if($this->_options['mode'] == 1)
    {
     $contents = serialize($contents);
    }
    else
    {
     $time = time();  
     $contents = "<?phpn".
       " // mktime: ". $time. "n".
       " return ".
       var_export($contents, true).
       "n?>";
    }
      
    $result = false;
    $f = @fopen($file, 'w');
    if ($f) {
     @flock($f, LOCK_EX);
     fseek($f, 0);
     ftruncate($f, 0);
     $tmp = @fwrite($f, $contents);
     if (!($tmp === false)) {
      $result = true;
     }
     @fclose($f);
    }
    @chmod($file,0777);
    return $result;     
   }
     
   /**
    * 从文件得到数据
    *  
    * @param sring $file
    * @return boolean|array
    */
   protected function _fileGetContents($file)
   {
    if(!is_file($file))
    {
     return false;
    }
      
    if($this->_options['mode'] == 1)
    {
     $f = @fopen($file, 'r');  
     @$data = fread($f,filesize($file));
     @fclose($f);
     return unserialize($data);
    }
    else
    {
     return include $file;
    }
   }
     
   /**
    * 构造函数
    */
   protected function __construct()
   {
     
   }
     
   /**
    * 设置缓存路径
    *  
    * @param string $path
    * @return self
    */
   public static function setCacheDir($path)
   {
    $instance = self::getInstance();
    if (!is_dir($path)) {
     exit('file_cache: ' . $path.' 不是一个有效路径 ');
    }
    if (!is_writable($path)) {
     exit('file_cache: 路径 "'.$path.'" 不可写');
    }
     
    $path = rtrim($path,'/') . '/';
    $instance->_options['cache_dir'] = $path;
      
    return $instance;
   }
     
   /**
    * 设置缓存文件前缀
    *  
    * @param srting $prefix
    * @return self
    */
   public static function setCachePrefix($prefix)
   {
    $instance = self::getInstance();
    $instance->_options['file_name_prefix'] = $prefix;
    return $instance;
   }
     
   /**
    * 设置缓存存储类型
    *  
    * @param int $mode
    * @return self
    */
   public static function setCacheMode($mode = 1)
   {
    $instance = self::getInstance();
    if($mode == 1)
    {
     $instance->_options['mode'] = 1;
    }
    else
    {
     $instance->_options['mode'] = 2;
    }
      
    return $instance;
   }
     
   /**
    * 删除所有缓存
    * @return boolean
    */
   public static function flush()
   {
    $instance = self::getInstance();
    $glob = @glob($instance->_options['cache_dir'] . $instance->_options['file_name_prefix'] . '--*');
      
    if(emptyempty($glob))
    {
     return false;
    }
      
    foreach ($glob as $v)
    {
     $fileName = basename($v);
     $id = $instance->_fileNameToId($fileName);
     $instance->delete($id);
    }
    return true;
   }
  }
   
  /* 初始化设置cache的配置信息什么的 */
  cache::setCachePrefix('core'); //设置缓存文件前缀
  cache::setCacheDir('./cache'); //设置存放缓存文件夹路径
   
  //模式1 缓存存储方式
  //a:3:{s:8:"contents";a:7:{i:0;i:1;i:1;i:2;i:2;i:3;i:3;i:34;i:4;i:5;i:5;i:6;i:6;i:6;}s:6:"expire";i:0;s:5:"mtime";i:1318218422;}
  //模式2 缓存存储方式
  /*
   <?php
   // mktime: 1318224645
   return array (
   'contents' =>  
   array (
   0 => 1,
   1 => 2,
   2 => 3,
   3 => 34,
   4 => 5,
   5 => 6,
   6 => 6,
   ),
   'expire' => 0,
   'mtime' => 1318224645,
  )
  ?>
   *  
   *  
   */
  cache::setCacheMode('2');
   
  if(!$row = cache::get('zj2'))
  {
     
   $array = array(1,2,3,34,5,6,6);
   $row = cache::set('zj2',$array);
  }
  // cache::flush(); 清空所有缓存
   
  print_r($row);
  文件缓存class
 
  <?php
  /**
   * 文件缓存类
   * @author xiaojiong & 290747680@qq.com
   * @date 2011-08-17
   */
  class cache
  {
   const FILE_LIFE_KEY = 'FILE_LIFE_KEY';
      
   const CLEAR_ALL_KEY = 'CLEAR_ALL';
      
   static $_instance = null;
      
   protected $_options = array(
    'cache_dir' => './cache',
    'file_locking' => true,
    'file_name_prefix' => 'cache',
    'cache_file_umask' => 0777,
    'file_life' => 100000
   );
      
   static function &getInstance($options = array())
   {
    if(self::$_instance === null)
    {
     self::$_instance = new self($options);
    }  
    return self::$_instance;
   }
      
   /**
    * 设置参数
    * @param array $options 缓存参数
    * @return void
    */
   static function &setOptions($options = array())
   {
     return self::getInstance($options);
   }
      
   /**
    * 构造函数
    * @param array $options 缓存参数
    * @return void
    */
   private function __construct($options = array())
   {   
    if ($this->_options['cache_dir'] !== null) {
        
     $dir = rtrim($this->_options['cache_dir'],'/') . '/';
     $this->_options['cache_dir'] = $dir;
        
     if (!is_dir($this->_options['cache_dir'])) {
      mkdir($this->_options['cache_dir'],0777,TRUE);
     }
     if (!is_writable($this->_options['cache_dir'])) {
      exit('file_cache: 路径 "'. $this->_options['cache_dir'] .'" 不可写');
     }
       
    } else {
     exit('file_cache: "options" cache_dir 不能为空 ');
    }
   }
     
   /**
    * 设置缓存路径
    * @param string $value
    * @return void
    */
   static function setCacheDir($value)
   {
    $self = & self::getInstance();
       
    if (!is_dir($value)) {
     exit('file_cache: ' . $value.' 不是一个有效路径 ');
    }
    if (!is_writable($value)) {
     exit('file_cache: 路径 "'.$value.'" 不可写');
    }
      
    $value = rtrim($this->_options['cache_dir'],'/') . '/';
       
    $self->_options['cache_dir'] = $value;
   } 

(编辑:我爱故事小小网_铜陵站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读