PHP缓存类
2018-07-20 来源:open-open
使用
<?php header("content-type:text/html;charset:utf-8"); require_once 'cache.class.php'; $dir = dirname(__FILE__).'/cache_data'; $cache = new Cache($dir); $cache->add(1, 'test'); $cache->set(2, 'abc',60); $cache->get(1); if(!$cache->get(1)){ echo $cache->tip_message; }else{ echo $cache->get(1); } $cache->delete(1); $cache->flush(); $cache->auto_delete_expired_file();
cache.class.php ~ 7KB 下载(61)
<?php // +---------------------------------------------------------------------- // |缓存类 // +---------------------------------------------------------------------- // | Author: justmepzy(justmepzy@gmail.com) // +---------------------------------------------------------------------- class Cache{ //提示信息 public $tip_message; //缓存目录 protected $cache_dir; //缓存文件名 private $cache_file_name; //缓存文件后缀 private $cache_file_suffix; public function __construct($dir,$cache_file_suffix = '.php'){ $this->cache_dir = isset($dir)?$dir:dirname(__FILE__).DIRECTORY_SEPARATOR.'default_cache_data'; $this->cache_file_suffix = $cache_file_suffix; if(!$this->dir_isvalid($this->cache_dir)){ die($this->tip_message);//创建目录失败 } } // +---------------------------------------------------------------------- // |添加一个值,如果已经存在,则返回false,写入文件失败返回false // +---------------------------------------------------------------------- // | // +---------------------------------------------------------------------- public function add($cache_key,$cache_value,$life_time=1800){ if(file_exists($this->get_cache_file_name($cache_key))){ $this->tip_message = '缓存数据已存在.'; return false; } $cache_data['data'] = $cache_value; $cache_data['life_time'] = $life_time; //以JSON格式写入文件 if(file_put_contents($this->get_cache_file_name($cache_key), json_encode($cache_data))){ return true; }else{ $this->tip_message = '写入缓存失败.'; return false; } } // +---------------------------------------------------------------------- // |添加一个值,如果已经存在,则覆写 // +---------------------------------------------------------------------- // | // +---------------------------------------------------------------------- public function set($cache_key,$cache_value,$life_time=1800){ $cache_data['data'] = $cache_value; $cache_data['life_time'] = $life_time; if(file_put_contents($this->get_cache_file_name($cache_key), json_encode($cache_data))){ return true; }else{ $this->tip_message = '写入缓存失败.'; return false; } } // +---------------------------------------------------------------------- // |获取一个key值 // +---------------------------------------------------------------------- // | // +---------------------------------------------------------------------- public function get($cache_key){ if(!file_exists($this->get_cache_file_name($cache_key))){ return false; } $data = $this->object_to_array(json_decode(file_get_contents($this->get_cache_file_name($cache_key)))); if($this->check_isvalid($data['life_time'])){ unset($data['life_time']); return $data['data']; }else{ unlink($this->cache_file_name); $this->tip_message = '数据已过期.'; return false; } } // +---------------------------------------------------------------------- // |删除一个key值 // +---------------------------------------------------------------------- // | // +---------------------------------------------------------------------- public function delete($cache_key){ if(file_exists($this->get_cache_file_name($cache_key))){ if(unlink($this->get_cache_file_name($cache_key))) return true; else return false; }else{ $this->tip_message = '文件不存在.'; return true; } } // +---------------------------------------------------------------------- // |清除所有缓存文件 // +---------------------------------------------------------------------- // | // +---------------------------------------------------------------------- public function flush(){ $this->delete_file($this->cache_dir); } // +---------------------------------------------------------------------- // |自动清除过期文件 // +---------------------------------------------------------------------- // | // +---------------------------------------------------------------------- public function auto_delete_expired_file(){ $this->delete_file($this->cache_dir,false); } // +---------------------------------------------------------------------- // |检查目录是否存在,不存在则创建 // +---------------------------------------------------------------------- // | // +---------------------------------------------------------------------- private function dir_isvalid($dir){ if (is_dir($dir)) return true; try { mkdir($dir,0777); }catch (Exception $e) { $this->tip_message = '所设定缓存目录不存在并且创建失败!请检查目录权限!'; return false; } return true; } // +---------------------------------------------------------------------- // |检查有效时间 // +---------------------------------------------------------------------- // | // +---------------------------------------------------------------------- private function check_isvalid($expired_time = 0) { //if(!file_exists($this->cache_file_name)) return false; if (!(@$mtime = filemtime($this->cache_file_name))) return false; if (time() -$mtime > $expired_time) return false; return true; } // +---------------------------------------------------------------------- // |获得缓存文件名 // +---------------------------------------------------------------------- // | // +---------------------------------------------------------------------- private function get_cache_file_name($key){ $this->cache_file_name = $this->cache_dir.DIRECTORY_SEPARATOR.md5($key).$this->cache_file_suffix; return $this->cache_file_name; } // +---------------------------------------------------------------------- // |object对象转换为数组 // +---------------------------------------------------------------------- // | // +---------------------------------------------------------------------- protected function object_to_array($obj){ $_arr = is_object($obj) ? get_object_vars($obj) : $obj; foreach ($_arr as $key => $val) { $val = (is_array($val) || is_object($val)) ? object_to_array($val) : $val; $arr[$key] = $val; } return $arr; } // +---------------------------------------------------------------------- // |删除目录下的所有文件 // +---------------------------------------------------------------------- // | $mode true删除所有 false删除过期 // +---------------------------------------------------------------------- protected function delete_file($dir,$mode=true) { $dh=opendir($dir); while ($file=readdir($dh)) { if($file!="." && $file!="..") { $fullpath=$dir."/".$file; if(!is_dir($fullpath)) { if($mode){ unlink($fullpath); }else{ $this->cache_file_name = $fullpath; if(!$this->get_isvalid_by_path($fullpath)) unlink($fullpath); } } else { delete_file($fullpath,$mode); } } } closedir($dh); } private function get_isvalid_by_path($path){ $data = $this->object_to_array(json_decode(file_get_contents($path))); return $this->check_isvalid($data['life_time']); } } ?>
标签: 权限
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点!
本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。
上一篇:php防盗链代码
下一篇:php加密解密处理类
最新资讯
热门推荐