PHP缓存类

2018-07-20    来源:open-open

容器云强势上线!快速搭建集群,上万Linux镜像随意使用


使用 

<?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&nbsp;~&nbsp;7KB&nbsp;&nbsp;&nbsp;&nbsp;下载(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加密解密处理类