php 文件缓存类

 1 //文件缓存类
 2  
 3 class FileCache {
 4  private $cacheTime = 3600;        //默认缓存时间   秒
 5     private $cacheDir = './filecache';    //缓存绝对路径   
 6     private $md5 = true;              //是否对键进行加密   
 7     private $suffix = ".php";         //设置文件后缀       
 8   
 9     public function __construct($config){   
10         if( is_array( $config ) ){   
11             foreach( $config as $key=>$val ){  
12                 $this->$key = $val;   
13             }  
14         }  
15     }        
16   
17     //设置缓存   
18     public function set($key,$val,$leftTime=null){  
19         $key = $this->md5 ? md5($key) : $key;  
20         $leftTime = $leftTime ? $leftTime : $this->cacheTime;   
21         !file_exists($this->cacheDir) && mkdir($this->cacheDir,0777);   
22         $file = $this->cacheDir.'/'.$key.$this->suffix;   
23         $val = serialize($val);   
24         @file_put_contents($file,$val) or $this->error(__line__,"文件写入失败");   
25         @chmod($file,0777)  or $this->error(__line__,"设定文件权限失败");  
26         @touch($file,time()+$leftTime) or $this->error(__line__,"更改文件时间失败");   
27     }   
28   
29     //得到缓存   
30     public function get($key){   
31         $this->clear();   
32         if( $this->_isset($key) ){   
33             $key_md5 = $this->md5 ? md5($key) : $key;  
34             $file = $this->cacheDir.'/'.$key_md5.$this->suffix;   
35             $val = file_get_contents($file);   
36             return unserialize($val);   
37         }   
38         return null;   
39     }        
40   
41     //判断文件是否有效   
42     public function _isset($key){   
43         $key = $this->md5 ? md5($key) : $key;   
44         $file = $this->cacheDir.'/'.$key.$this->suffix;   
45         if( file_exists($file) ){   
46             if( @filemtime($file) >= time() ){   
47                 return true;   
48             }else{   
49                 @unlink($file);   
50                 return false;   
51             }   
52         }   
53         return false;  
54     }        
55   
56     //删除文件   
57     public function _unset($key){   
58         if( $this->_isset($key) ){   
59             $key_md5 = $this->md5 ? md5($key) : $key;  
60             $file = $this->cacheDir.'/'.$key_md5.$this->suffix;  
61             return @unlink($file);   
62         }   
63         return false;   
64     }     
65   
66     //清除过期缓存文件   
67     public function clear(){   
68         $files = scandir($this->cacheDir);  
69         foreach ($files as $val){   
70             if (@filemtime($this->cacheDir."/".$val) < time()){   
71                 @unlink($this->cacheDir."/".$val);   
72             }  
73         }   
74     }       
75   
76     //清除所有缓存文件   
77     public function clear_all(){  
78         $files = scandir($this->cacheDir);  
79         foreach ($files as $val){   
80             @unlink($this->cacheDir."/".$val);   
81         }  
82     }        
83   
84     private function error($line,$msg){  
85         die("出错文件:".__file__."/n出错行:$line/n错误信息:$msg");   
86     }   

调用方法:
    
           //cacheTime 缓存时间 1个小时
                    $cacheFile = new FileCache(array('cacheTime'=>3600,'suffix'=>'.php'));   
                    $cache_1 =$cacheFile->get('key1');
                    $cache_2 =$cacheFile->get('key2');
                    if( $cache_1 ){
                        $resArr_result = $cache_1;
                    }else{
                        //读数据库$resArr_result = array(***);
                         //设置缓存
                         $cacheFile->set('key1',$resArr_result);   
                    }

 

 

posted @ 2017-06-07 17:06  /折磨  阅读(429)  评论(0编辑  收藏  举报