PHP 缓存类,支持自定义 key 和 fallback 方法,缓存任意执行结果数据,并能清理及控制缓存时间

 

<?php
class Cache{
    //缓存类
    private  $dir ;
    private  $end = '.txt';
    function __construct(){
        $this->dir = dirname(__FILE__).'/file/';
    }
    /**
     * [SetCache 设置缓存]
     * @zeo
     * @DateTime 2016-11-08
     * @param    string     $key         [文件名]
     * @param    string     $content     [缓存内容(若需使用回调缓存需为空)]
     * @param    int        $expires      [过期时间]
     * @param    string     $fallback     [回调方法名(缓存返回值)]
     * @param    array      $params     [传递参数]
     * @return   bool       
     */
    public function SetCache($key,$content='',$expires=0,$fallback='',$params=array()){        
        $filename = $this->dir.$key.$this->end;
        $dir = dirname($filename);
        if(!is_dir($dir)){        
            mkdir($dir,0777);
        }
        $data['time']    = time();
        $data['expries'] = (int)$expires;        
        if($content){
            $data['data']    = $content;            
            return file_put_contents($filename,json_encode($data));
        }
        if($fallback){
            $data['data']    = call_user_func_array($fallback,$params);            
            return file_put_contents($filename,json_encode($data));            
        }else{
            return false;
        }
    }
    //获取缓存
    public function getCache($key=''){
        $filename = $this->dir.$key.$this->end;
        if($key){
            $data = json_decode(file_get_contents($filename),true);
            if(time()>($data['time']+$data['expires'])){
                return $data['data'];        
            }else{
                unlink($filename);
                return false;
            }
        }else{
            return false;
        }
    }
    //删除缓存
    public function DelCache($key=''){
        $filename = $this->dir.$key.$this->end;
        if(empty($key)){
            return $this->clearDir();
        }
        if(!is_file($filename)){
            return false;
        }else{
            return unlink($filename);
        }        
    }
    //清空目录
    private function clearDir(){
        if($handle = opendir($this->dir)){
            while(false!==($item = readdir($handle))){
                if($item!="."&&$item!=".."){
                    return unlink("$this->dir/$item");
                }
            }
        }else{
            return false;
        }
    }
}

 

posted @ 2016-11-09 09:16  zeoo  阅读(478)  评论(0)    收藏  举报