程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> PHP綜合 >> php緩存類,分服務器存放

php緩存類,分服務器存放

編輯:PHP綜合
 1 <?PHP
  2 defined('ROOT_DIR') || define('ROOT_DIR',     str_replace('\\', '/', dirname(__FILE__) . '/'));
  3
  4 /**
  5  * 緩存類
  6  *
  7  * 實現分服務器文件緩存
  8  *
  9  * @version     $Id: Caches.PHP 2009-07-13 mmfei<[email protected]> $
 10  * @author      mmfei<[email protected]>
 11  */
 12 class Caches{
 13     private $intTimeOut = 0; //超時時間,0為不超時
 14     private $strFix = ".date.PHP";
 15     public static function fnGetCaches($server,$key){
 16         $= new Caches();
 17         return $o->GetCaches($server,$key);
 18     }
 19     public static function fnCreateCaches($server,$key,$data,$isreplace=true,$isbackup=true){
 20         $= new Caches();
 21         return $o->CreateCaches($server,$key,$data,$isreplace=true,$isbackup=true);
 22     }
 23     /**
 24      * 獲得緩存
 25      * 注意:如果設置了intTimeOut > 0 , 則不會返回超過存放時間的緩存
 26      *
 27      * @param string $server
 28      * @param string $key
 29      * @return mix
 30      */
 31     public function GetCaches($server,$key){
 32         $content = '';
 33         if($this->IsExistsCaches($server,$key) && $this->GetTimeOut() == 0  || !$this->IsTimeOutFile($this->GetPath($server,$key))){
 34             $content = file_get_contents($this->GetPath($server,$key));
 35             $content = $this->Decode($content);
 36         }
 37         return $content;
 38     }
 39     /**
 40      * 創建緩存
 41      *
 42      * @param string $server
 43      * @param string $key
 44      * @param mix $data
 45      * @param boolean $isreplace
 46      * @param boolean $isbackup
 47      * @return boolean
 48      */
 49     public function CreateCaches($server,$key,$data,$isreplace=true,$isbackup=true){
 50         if($this->IsExistsCaches($server,$key)){
 51             if($isreplace){
 52                 if($isbackup && !$this->BackupCache($server,$key))  return false;
 53             }else{
 54                 return false;
 55             }
 56         }
 57
 58         if(!is_dir($this->GetCachePath().$server) && !$this->CreateFolder($this->GetCachePath().$server))
 59             dIE("無權創建緩存文件");
 60         return $this->WriteFile($this->GetPath($server,$key),$this->Encode($data));
 61     }
 62
 63     /**
 64      * 清理緩存 , 需要備份
 65      * 如果是清理服務器的緩存,不做備份,慎用!!!
 66      *
 67      * @param string $server
 68      * @param string $key
 69      * @param boolean $isbackup
 70      * @return boolean
 71      */
 72     public function CleanCaches($server , $key = '' , $isbackup = true){
 73         if(empty($key)){//這裡不做備份,注意了!!!!
 74             return $this->DelDir($this->GetCachePath().$server);
 75         }elseif($this->IsExistsCaches($server,$key)){
 76             if($isbackup)
 77                 $this->BackupCache($server,$key);
 78             return @unlink($this->GetPath($server,$key));
 79         }
 80         return true;
 81     }
 82     
 83     /**
 84      * 備份緩存
 85      *
 86      * @param string $server
 87      * @param string $key
 88      * @return boolean
 89      */
 90     public function BackupCache($server = '',$key =''){
 91         if($this->IsExistsCaches($server,$key)){
 92             if(!is_dir($this->GetBackupCachePath().$server))
 93                 $this->CreateFolder($this->GetBackupCachePath().$server);
 94             return $this->WriteFile($this->GetBackupPath($server,$key),$this->Decode($this->GetCaches($server,$key)));
 95         }
 96         return false;
 97     }
 98
 99     /**
100      * 判斷是否已經存在緩存
101      *
102      * @param string $server
103      * @param string $key
104      * @return boolean
105      */
106     public function IsExistsCaches($server,$key){
107         if(empty($server) || empty($key)) return false;
108         $strFile = $this->GetPath($server,$key);
109         return file_exists($strFile);
110     }
111     /**
112      * 是否超時
113      *
114      * @param string $server
115      * @param string $key
116      * @return boolean
117      */
118     public function IsTimeOut($server,$key){
119         return $this->IsTimeOutFile($this->GetPath($server,$key));
120     }  
121     /**
122      * 設置超時時間
123      *
124      * @param integer $i
125      * @return void
126      */
127     public function SetTimeOut($i){
128         if((int)$< 0) return false;
129         $this->intTimeOut = (int)$i;
130     }
131     
132     /**
133      * 寫入文件
134      *
135      * @param string $strFile
136      * @param mix $strContent
137      * @param string $strMode  例如 : FILE_APPEND
138      * @return boolean
139      */
140     private function WriteFile($strFile , $strContent = '' , $strMode = ''){
141         if(empty($strMode))
142             return file_put_contents($strFile,$strContent);
143         else
144             return file_put_contents($strFile,$strContent,$strMode);
145     }
146
147     private function Encode($s){
148         return serialize($s);
149     }
150     private function Decode($s){
151         return unserialize($s);
152     }
153     
154     /**
155      * 獲得緩存文件路徑
156      *
157      * @param string $server
158      * @param string $key
159      * @return string
160      */
161     private function GetPath($server,$key){
162         return $this->GetCachePath().$server."/".$key.$this->GetFix();
163     }
164     private function GetBackupPath($server,$key){
165         return $this->GetBackupCachePath().$server."/".$key.$this->GetBackupFix();
166     }
167
168     /**
169      * 獲得緩存文件夾
170      *
171      * @return string
172      */
173     private function GetCachePath(){
174         return ROOT_DIR . "Caches/";
175     }
176
177     /**
178      * 獲得備份緩存文件夾
179      *
180      * @return string
181      */
182     private function GetBackupCachePath(){
183         return ROOT_DIR . "CachesBackup/";
184     }
185
186     /**
187      * 創建服務器的緩存文件夾
188      *
189      * @param string $server
190      * @return boolean
191      */
192     private function CreateServerFolder($server){
193         return $this->CreateFolder($this->GetCachePath().$server);
194     }
195     /**
196      * 是否存在服務器緩存文件夾
197      *
198      * @param string $server
199      * @return boolean
200      */
201     private function IsExistsServerFolder($server){
202         return is_dir($this->GetCachePath().$server);
203     }
204     /**
205      * 創建文件夾
206      *
207      * @param string $strPath
208      * @return boolean
209      */
210     private function CreateFolder($strPath){
211         return mkdir($strPath,0777,true);
212     }
213     /**
214      * 獲取超時時間
215      *
216      * @return integer
217      */
218     private function GetTimeOut(){
219         return $this->intTimeOut;
220     }
221     /**
222      * 指定的緩存文件是否已經超時
223      *
224      * @param string $strFile
225      * @return boolean
226      */
227     private function IsTimeOutFile($strFile){
228         if(!file_exists($strFile)) return false;
229         $= time() - filemtime($strFile);
230         return $>= $this->GetTimeout();
231     }
232     /**
233      * 獲取緩存文件的後綴
234      *
235      * @return string
236      */
237     private function GetFix(){
238         return $this->strFix;
239     }
240     /**
241      * 獲取備份緩存文件的後綴格式
242      *
243      * @return unknown
244      */
245     private function GetBackupFix(){
246         return ".backup.".date("YmdHis").".PHP";
247     }
248     /**
249      * 刪除文件夾
250      * 包括文件夾下的所有文件  (危險操作!!慎用)
251      *
252      * @param string $strDir
253      * @return boolean
254      */
255     private function DelDir($strDir) {
256         if(!is_dir($strDir)) return true;
257
258         $objHandle = opendir($strDir);
259         while ($objFile = readdir($objHandle))
260             if($objFile!="." && $objFile != ".." && $strFullPath = $strDir."/".$objFile)                
261                 if(!is_dir($strFullPath)) unlink($strFullPath);
262                 else $this->DelDir($strFullPath);
263         closedir($objHandle);
264         return(rmdir($strDir));
265     }
266 }
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved