当前位置:首页 > PHP教程 > php文件操作 > 列表

php文件缓存方法总结

发布:smiling 来源: PHP粉丝网  添加日期:2021-07-14 21:38:44 浏览: 评论:0 

这篇文章主要为大家详细介绍了php文件缓存方法,内容如很详细,感兴趣的小伙伴们可以参考一下,为大家分享很全的php文件缓存,供大家参考,具体内容如下。

  1. <?php  
  2. class cache 
  3. {  
  4.  private static $_instance = null; 
  5.  
  6.  protected $_options = array
  7.   'cache_dir'  => "./"
  8.   'file_name_prefix' => 'cache'
  9.   'mode'   => '1'//mode 1 为serialize model 2为保存为可执行文件 
  10.  );  
  11.    
  12.  /** 
  13.   * 得到本类实例 
  14.   *  
  15.   * @return Ambiguous 
  16.   */ 
  17.  public static function getInstance() 
  18.  { 
  19.   if(self::$_instance === null) 
  20.   { 
  21.    self::$_instance = new self(); 
  22.   } 
  23.   return self::$_instance
  24.  }  
  25.    
  26.  /** 
  27.   * 得到缓存信息 
  28.   *  
  29.   * @param string $id 
  30.   * @return boolean|array 
  31.   */ 
  32.  public static function get($id
  33.  { 
  34.   $instance = self::getInstance(); 
  35.     
  36.   //缓存文件不存在 
  37.   if(!$instance->has($id)) 
  38.   { 
  39.    return false; 
  40.   } 
  41.     
  42.   $file = $instance->_file($id); 
  43.     
  44.   $data = $instance->_fileGetContents($file); 
  45.     
  46.   if($data['expire'] == 0 || time() < $data['expire']) 
  47.   { 
  48.    return $data['contents']; 
  49.   } 
  50.   return false; 
  51.  } 
  52.    
  53.  /** 
  54.   * 设置一个缓存 
  55.   *  
  56.   * @param string $id 缓存id 
  57.   * @param array $data 缓存内容 
  58.   * @param int $cacheLife 缓存生命 默认为0无限生命 
  59.   */ 
  60.  public static function set($id$data$cacheLife = 0) 
  61.  { 
  62.   $instance = self::getInstance(); 
  63.     
  64.   $time = time(); 
  65.   $cache   = array(); 
  66.   $cache['contents'] = $data
  67.   $cache['expire'] = $cacheLife === 0 ? 0 : $time + $cacheLife
  68.   $cache['mtime'] = $time
  69.     
  70.   $file = $instance->_file($id); 
  71.     
  72.   return $instance->_filePutContents($file$cache); 
  73.  } 
  74.    
  75.  /** 
  76.   * 清除一条缓存 
  77.   *  
  78.   * @param string cache id   
  79.   * @return void 
  80.   */ 
  81.  public static function delete($id
  82.  { 
  83.   $instance = self::getInstance(); 
  84.     
  85.   if(!$instance->has($id)) 
  86.   { 
  87.    return false; 
  88.   } 
  89.   $file = $instance->_file($id); 
  90.   //删除该缓存 
  91.   return unlink($file); 
  92.  } 
  93.    
  94.  /** 
  95.   * 判断缓存是否存在 
  96.   *  
  97.   * @param string $id cache_id 
  98.   * @return boolean true 缓存存在 false 缓存不存在 
  99.   */ 
  100.  public static function has($id
  101.  { 
  102.   $instance = self::getInstance(); 
  103.   $file  = $instance->_file($id); 
  104.     
  105.   if(!is_file($file)) 
  106.   { 
  107.    return false; 
  108.   } 
  109.   return true; 
  110.  } 
  111.    
  112.  /** 
  113.   * 通过缓存id得到缓存信息路径 
  114.   * @param string $id 
  115.   * @return string 缓存文件路径 
  116.   */ 
  117.  protected function _file($id
  118.  { 
  119.   $instance = self::getInstance(); 
  120.   $fileNmae = $instance->_idToFileName($id); 
  121.   return $instance->_options['cache_dir'] . $fileNmae
  122.  }  
  123.    
  124.  /** 
  125.   * 通过id得到缓存信息存储文件名 
  126.   *  
  127.   * @param $id 
  128.   * @return string 缓存文件名 
  129.   */ 
  130.  protected function _idToFileName($id
  131.  { 
  132.   $instance = self::getInstance(); 
  133.   $prefix = $instance->_options['file_name_prefix']; 
  134.   return $prefix . '---' . $id
  135.  } 
  136.    
  137.  /** 
  138.   * 通过filename得到缓存id 
  139.   *  
  140.   * @param $id 
  141.   * @return string 缓存id 
  142.   */ 
  143.  protected function _fileNameToId($fileName
  144.  { 
  145.   $instance = self::getInstance(); 
  146.   $prefix = $instance->_options['file_name_prefix']; 
  147.   return preg_replace('/^' . $prefix . '---(.*)$/''$1'$fileName); 
  148.  } 
  149.    
  150.  /** 
  151.   * 把数据写入文件 
  152.   *  
  153.   * @param string $file 文件名称 
  154.   * @param array $contents 数据内容 
  155.   * @return bool  
  156.   */ 
  157.  protected function _filePutContents($file$contents
  158.  { 
  159.   if($this->_options['mode'] == 1) 
  160.   { 
  161.    $contents = serialize($contents); 
  162.   } 
  163.   else 
  164.   { 
  165.    $time = time();  
  166.    $contents = "<?php\n"
  167.      " // mktime: "$time"\n"
  168.      " return "
  169.      var_export($contents, true). 
  170.      "\n?>"
  171.   } 
  172.     
  173.   $result = false; 
  174.   $f = @fopen($file'w'); 
  175.   if ($f) { 
  176.    @flock($f, LOCK_EX); 
  177.    fseek($f, 0); 
  178.    ftruncate($f, 0); 
  179.    $tmp = @fwrite($f$contents); 
  180.    if (!($tmp === false)) { 
  181.     $result = true; 
  182.    } 
  183.    @fclose($f); 
  184.   } 
  185.   @chmod($file,0777); 
  186.   return $result;     
  187.  } 
  188.    
  189.  /** 
  190.   * 从文件得到数据 
  191.   *  
  192.   * @param sring $file 
  193.   * @return boolean|array 
  194.   */ 
  195.  protected function _fileGetContents($file
  196.  { 
  197.   if(!is_file($file)) 
  198.   { 
  199.    return false; 
  200.   } 
  201.     
  202.   if($this->_options['mode'] == 1) 
  203.   { 
  204.    $f = @fopen($file'r');  
  205.    @$data = fread($f,filesize($file)); 
  206.    @fclose($f); 
  207.    return unserialize($data); 
  208.   } 
  209.   else 
  210.   { 
  211.    return include $file
  212.   } 
  213.  } 
  214.    
  215.  /** 
  216.   * 构造函数 
  217.   */ 
  218.  protected function __construct() 
  219.  { 
  220.    
  221.  } 
  222.    
  223.  /** 
  224.   * 设置缓存路径 
  225.   *  
  226.   * @param string $path 
  227.   * @return self 
  228.   */ 
  229.  public static function setCacheDir($path
  230.  { 
  231.   $instance = self::getInstance(); 
  232.   if (!is_dir($path)) { 
  233.    exit('file_cache: ' . $path.' 不是一个有效路径 '); 
  234.   } 
  235.   if (!is_writable($path)) { 
  236.    exit('file_cache: 路径 "'.$path.'" 不可写'); 
  237.   } 
  238.    
  239.   $path = rtrim($path,'/') . '/'
  240.   $instance->_options['cache_dir'] = $path
  241.     
  242.   return $instance
  243.  } 
  244.    
  245.  /** 
  246.   * 设置缓存文件前缀 
  247.   *  
  248.   * @param srting $prefix 
  249.   * @return self 
  250.   */ 
  251.  public static function setCachePrefix($prefix
  252.  { 
  253.   $instance = self::getInstance(); 
  254.   $instance->_options['file_name_prefix'] = $prefix
  255.   return $instance
  256.  } 
  257.    
  258.  /** 
  259.   * 设置缓存存储类型 
  260.   *  
  261.   * @param int $mode 
  262.   * @return self 
  263.   */ 
  264.  public static function setCacheMode($mode = 1) 
  265.  { 
  266.   $instance = self::getInstance(); 
  267.   if($mode == 1) 
  268.   { 
  269.    $instance->_options['mode'] = 1; 
  270.   } 
  271.   else 
  272.   { 
  273.    $instance->_options['mode'] = 2; 
  274.   } 
  275.     
  276.   return $instance
  277.  } 
  278.    
  279.  /** 
  280.   * 删除所有缓存 
  281.   * @return boolean 
  282.   */ 
  283.  public static function flush() 
  284.  { 
  285.   $instance = self::getInstance(); 
  286.   $glob = @glob($instance->_options['cache_dir'] . $instance->_options['file_name_prefix'] . '--*'); 
  287.     
  288.   if(emptyempty($glob)) 
  289.   { 
  290.    return false; 
  291.   } 
  292.     
  293.   foreach ($glob as $v
  294.   { 
  295.    $fileName = basename($v); 
  296.    $id = $instance->_fileNameToId($fileName); 
  297.    $instance->delete($id); 
  298.   } 
  299.   return true; 
  300.  } 
  301.  
  302. /* 初始化设置cache的配置信息什么的 */ 
  303. cache::setCachePrefix('core'); //设置缓存文件前缀 
  304. cache::setCacheDir('./cache'); //设置存放缓存文件夹路径 
  305.  
  306. //模式1 缓存存储方式 
  307. //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;} 
  308. //模式2 缓存存储方式 
  309. /* 
  310.  <?php 
  311.  // mktime: 1318224645 
  312.  return array ( 
  313.  'contents' =>  
  314.  array ( 
  315.  0 => 1, 
  316.  1 => 2, 
  317.  2 => 3, 
  318.  3 => 34, 
  319.  4 => 5, 
  320.  5 => 6, 
  321.  6 => 6, 
  322.  ), 
  323.  'expire' => 0, 
  324.  'mtime' => 1318224645, 
  325. ) 
  326. ?> 
  327.  *  
  328.  *  
  329.  */ 
  330. cache::setCacheMode('2'); 
  331.  
  332. if(!$row = cache::get('zj2')) 
  333.    
  334.  $array = array(1,2,3,34,5,6,6); 
  335.  $row = cache::set('zj2',$array); 
  336. // cache::flush(); 清空所有缓存 
  337.  
  338. print_r($row); 

文件缓存class

  1. <?php 
  2. /** 
  3.  * 文件缓存类 
  4.  * @author xiaojiong & 290747680@qq.com 
  5.  * @date 2011-08-17 
  6.  */ 
  7. class cache 
  8.  const FILE_LIFE_KEY = 'FILE_LIFE_KEY'
  9.     
  10.  const CLEAR_ALL_KEY = 'CLEAR_ALL'
  11.     
  12.  static $_instance = null; 
  13.     
  14.  protected $_options = array
  15.   'cache_dir' => './cache'
  16.   'file_locking' => true, 
  17.   'file_name_prefix' => 'cache'
  18.   'cache_file_umask' => 0777, 
  19.   'file_life' => 100000 
  20.  ); 
  21.     
  22.  static function &getInstance($options = array()) 
  23.  { 
  24.   if(self::$_instance === null) 
  25.   { 
  26.    self::$_instance = new self($options); 
  27.   }  
  28.   return self::$_instance
  29.  } 
  30.     
  31.  /** 
  32.   * 设置参数 
  33.   * @param array $options 缓存参数 
  34.   * @return void 
  35.   */ 
  36.  static function &setOptions($options = array()) 
  37.  { 
  38.    return self::getInstance($options); 
  39.  } 
  40.     
  41.  /** 
  42.   * 构造函数 
  43.   * @param array $options 缓存参数 
  44.   * @return void 
  45.   */ 
  46.  private function __construct($options = array()) 
  47.  {   
  48.   if ($this->_options['cache_dir'] !== null) { 
  49.       
  50.    $dir = rtrim($this->_options['cache_dir'],'/') . '/'
  51.    $this->_options['cache_dir'] = $dir
  52.       
  53.    if (!is_dir($this->_options['cache_dir'])) { 
  54.     mkdir($this->_options['cache_dir'],0777,TRUE); 
  55.    } 
  56.    if (!is_writable($this->_options['cache_dir'])) { 
  57.     exit('file_cache: 路径 "'$this->_options['cache_dir'] .'" 不可写'); 
  58.    } 
  59.      
  60.   } else { 
  61.    exit('file_cache: "options" cache_dir 不能为空 '); 
  62.   } 
  63.  } 
  64.    
  65.  /** 
  66.   * 设置缓存路径 
  67.   * @param string $value 
  68.   * @return void 
  69.   */ 
  70.  static function setCacheDir($value
  71.  { 
  72.   $self = & self::getInstance(); 
  73.      
  74.   if (!is_dir($value)) { 
  75.    exit('file_cache: ' . $value.' 不是一个有效路径 '); 
  76.   } 
  77.   if (!is_writable($value)) { 
  78.    exit('file_cache: 路径 "'.$value.'" 不可写'); 
  79.   } 
  80.     
  81.   $value = rtrim($this->_options['cache_dir'],'/') . '/'
  82.      
  83.   $self->_options['cache_dir'] = $value
  84.  } 
  85.     
  86.  /** 
  87.   * 存入缓存数据 
  88.   * @param array $data   放入缓存的数据 
  89.   * @param string $id   缓存id(又名缓存识别码) 
  90.   * @param cache_life   缓存时间 
  91.   * @return boolean True if no problem 
  92.   */ 
  93.  static function save($data$id = null, $cache_life = null) 
  94.  { 
  95.   $self = & self::getInstance(); 
  96.   if (!$id) { 
  97.    if ($self->_id) { 
  98.     $id = $self->_id; 
  99.    } else { 
  100.     exit('file_cache:save() id 不能为空!'); 
  101.    } 
  102.   } 
  103.   $time = time(); 
  104.      
  105.   if($cache_life) { 
  106.    $data[self::FILE_LIFE_KEY] = $time + $cache_life
  107.   } 
  108.   elseif 
  109.   ($cache_life != 0){ 
  110.    $data[self::FILE_LIFE_KEY] = $time + $self->_options['file_life']; 
  111.   } 
  112.      
  113.   $file = $self->_file($id); 
  114.      
  115.   $data = "<?php\n"
  116.     " // mktime: "$time"\n"
  117.     " return "
  118.     var_export($data, true). 
  119.     "\n?>" 
  120.     ; 
  121.      
  122.   $res = $self->_filePutContents($file$data); 
  123.   return $res
  124.  } 
  125.     
  126.     
  127.  /** 
  128.   * 得到缓存信息 
  129.   * 
  130.   * @param string $id 缓存id 
  131.   * @return string|array 缓存数据 
  132.   */ 
  133.  static function load($id
  134.  { 
  135.   $self = & self::getInstance(); 
  136.   $time = time(); 
  137.   //检测缓存是否存在 
  138.   if (!$self->test($id)) { 
  139.    // The cache is not hit ! 
  140.    return false; 
  141.   } 
  142.      
  143.   //全部清空识别文件 
  144.   $clearFile = $self->_file(self::CLEAR_ALL_KEY); 
  145.      
  146.   $file = $self->_file($id); 
  147.      
  148.   //判断缓存是否已被全部清除 
  149.   if(is_file($clearFile) && filemtime($clearFile) > filemtime($file)) 
  150.   { 
  151.    return false; 
  152.   } 
  153.     
  154.   $data = $self->_fileGetContents($file); 
  155.   if(emptyempty($data[self::FILE_LIFE_KEY]) || $time < $data[self::FILE_LIFE_KEY]) { 
  156.    unset($data[self::FILE_LIFE_KEY]);  
  157.    return $data;    
  158.   } 
  159.   return false; 
  160.  }  
  161.     
  162.  /** 
  163.   * 写入缓存文件 
  164.   * 
  165.   * @param string $file 缓存路径 
  166.   * @param string $string 缓存信息 
  167.   * @return boolean true 成功 
  168.   */ 
  169.  protected function _filePutContents($file$string
  170.  { 
  171.   $self = & self::getInstance(); 
  172.   $result = false; 
  173.   $f = @fopen($file'ab+'); 
  174.   if ($f) { 
  175.    if ($self->_options['file_locking']) @flock($f, LOCK_EX); 
  176.    fseek($f, 0); 
  177.    ftruncate($f, 0); 
  178.    $tmp = @fwrite($f$string); 
  179.    if (!($tmp === false)) { 
  180.     $result = true; 
  181.    } 
  182.    @fclose($f); 
  183.   } 
  184.   @chmod($file$self->_options['cache_file_umask']); 
  185.   return $result
  186.  } 
  187.     
  188.  /** 
  189.   * 格式化后的缓存文件路径 
  190.   * 
  191.   * @param string $id 缓存id 
  192.   * @return string 缓存文件名(包括路径) 
  193.   */ 
  194.  protected function _file($id
  195.  { 
  196.   $self = & self::getInstance(); 
  197.   $fileName = $self->_idToFileName($id); 
  198.   return $self->_options['cache_dir'] . $fileName
  199.  }  
  200.     
  201.  /** 
  202.   * 格式化后的缓存文件名字 
  203.   * 
  204.   * @param string $id 缓存id 
  205.   * @return string 缓存文件名 
  206.   */ 
  207.  protected function _idToFileName($id
  208.  { 
  209.   $self = & self::getInstance(); 
  210.   $self->_id = $id
  211.   $prefix = $self->_options['file_name_prefix']; 
  212.   $result = $prefix . '---' . $id
  213.   return $result
  214.  }  
  215.     
  216.  /** 
  217.   * 判断缓存是否存在 
  218.   * 
  219.   * @param string $id Cache id 
  220.   * @return boolean True 缓存存在 False 缓存不存在 
  221.   */ 
  222.  static function test($id
  223.  { 
  224.   $self = & self::getInstance(); 
  225.   $file = $self->_file($id); 
  226.      
  227.   if (!is_file($file)) { 
  228.    return false; 
  229.   } 
  230.      
  231.   return true; 
  232.  } 
  233.     
  234.  /** 
  235.   * 得到缓存信息 
  236.   * 
  237.   * @param string $file 缓存路径 
  238.   * @return string 缓存内容 
  239.   */ 
  240.  protected function _fileGetContents($file
  241.  { 
  242.   if (!is_file($file)) { 
  243.    return false; 
  244.   } 
  245.   return include $file
  246.  }   
  247.     
  248.  /** 
  249.   * 清除所有缓存 
  250.   *  
  251.   * @return void 
  252.   */ 
  253.  static function clear() 
  254.  { 
  255.   $self = & self::getInstance(); 
  256.   $self->save('CLEAR_ALL',self::CLEAR_ALL_KEY);  
  257.  }  
  258.     
  259.  /** 
  260.   * 清除一条缓存 
  261.   *  
  262.   * @param string cache id  
  263.   * @return void 
  264.   */ 
  265.  static function del($id
  266.  { 
  267.   $self = & self::getInstance(); 
  268.   if(!$self->test($id)){ 
  269.    // 该缓存不存在 
  270.    return false; 
  271.   } 
  272.   $file = $self->_file($id); 
  273.   return unlink($file); 
  274.  }  

存入数据

  1. <?php 
  2. $config = array
  3.  'name' => 'xiaojiong'
  4.  'qq' => '290747680'
  5.  'age' => '20'
  6. ); 
  7.  
  8. //第一个参数 缓存data 
  9. //第二个参数 缓存id 
  10. //第三个参数 cache_life 0 永不过期(cache::clear()清空所有除外) 默认cache_life 为option_cache_life 
  11. cache::save($config,'config',0); 

载入数据

  1. <?php 
  2. //只有一个参数 cache_id 
  3. $config = cache::load('config'); 
清空缓存
  1. <?php 
  2. //清空指定缓存 
  3. cache::del('config'); 
  4. //清空所有缓存 
  5. cache::clear(); 

cache信息配置

  1. //在执行所有cache_func前调用 
  2.  
  3. $_options = array
  4.  'cache_dir' => './cache'//缓存文件目录 
  5.  'file_name_prefix' => 'cache',//缓存文件前缀 
  6.  'file_life' => 100000, //缓存文件生命 
  7. ); 
  8. cache::setOptions($options); 
  9.  
  10. //再执行 就会按着新配置信息执行,否则是默认信息 
  11. cache::save($arr,'arr'); 
  12. //就是这个方法 貌似不合理 望大家指点 

以上就是本文的全部内容,希望对大家的学习有所帮助。

Tags: php文件缓存

分享到:

相关文章