class Cache { /**キャッシュディレクトリ **/ var $CacheDir = './c'; /** キャッシュされたファイル ** / var $CacheFile = ''; /**ファイルキャッシュ時間 (分) **/ var $CacheTime = 0; /**ファイルがキャッシュされているかどうか **/ var $CacheFound = False; /**エラーとデバッグ情報 **/ var $DebugMsg = NULL; function Cache($CacheTime = 0) { $this->CacheTime = $CacheTime; } private function Run() { /**キャッシュ時間が0より大きい場合は、キャッシュされたファイルの変更時間をキャッシュ時間内で検出し、それが0以下の場合はFalseとなります。 false を返し、キャッシュされたファイルを削除します */ Return $this->CacheTime ? $this->CheckCacheFile() : $this->CleanCacheFile(); } function GetCache($VistUrl,$CacheFileType = 'html') { $this ->SetCacheFile ($VistUrl,$CacheFileType);
$fileName=$this->CheckCacheFile(); if($fileName) { $fp = fopen($fileName,"r"); $ content_= fread( $fp, filesize($fileName)); fclose($fp); return $content_; } else { return false; } } プライベート関数 SetCacheFile($VistUrl,$CacheFileType = 'html' ) { if(empty($VistUrl)) { /**デフォルトはindex.html **/ $this->CacheFile = 'index'; }else { /**渡されたパラメータが $_POST * の場合*/ $this->CacheFile = is_array($VistUrl) ? implode('.',$VistUrl) : $VistUrl; } $this->CacheFile = $this->CacheDir.'/'.md5( $this->gt;CacheFile); $this->CacheFile.= '.'.$CacheFileType; }
function SetCacheTime($t = 60) { $this->CacheTime = $t; }
プライベート関数 CheckCacheFile() { if(!$this->CacheTime || !file_exists($this->CacheFile)) {Return False;} /**ファイルの作成/変更日と現在の日付との時間差を比較します **/ $GetTime=( Time()- Filemtime($this->CacheFile))/(60*1); /**Filemtime 関数にはキャッシュがあります。キャッシュの消去に注意してください **/ Clearstatcache(); $this->Debug('制限時間 '.($ GetTime*60) .'/'.($this->CacheTime*60).''); $this->CacheFound = $GetTime CacheTime ? : False; $this->CacheFound を返す; }
関数 SaveToCacheFile($VistUrl,$Content,$CacheFileType = 'html') { $this->SetCacheFile($VistUrl,$CacheFileType); if(!$this->CacheTime) { Return False; } /**キャッシュディレクトリが存在するか確認する **/ if(true === $this->CheckCacheDir()) { $CacheFile = $this->CacheFile; $CacheFile = str_replace('//',' /',$CacheFile); $fp = @fopen($CacheFile,"wb"); if(!$fp) { $this->Debug('ファイル '.$CacheFile.' を開く失敗') ; }else { if(@!fwrite($fp,$Content)){ $this->Debug('Write '.$CacheFile.' Fail'); }else { $this-> Debug('キャッシュされたファイル'); }; @fclose($fp); } }else { /**キャッシュディレクトリが存在しないか、ディレクトリを作成できません **/ $this->Debug('キャッシュフォルダー'.$this- >CacheDir.' 見つかりません'); } }
プライベート関数 CheckCacheDir() { if(file_exists($this->CacheDir)) { Return true; } /**現在の作業ディレクトリを保存 **/ $Location = getcwd(); /**パスを個別のディレクトリに分割します **/ $Dir = split("/", $this->CacheDir); /**ディレクトリを作成するループ **/ $CatchErr = True; for ($i=0; $i if (!file_exists($Dir[$i])){ /** ディレクトリの作成に失敗した場合は False が返され、最後に作成されたディレクトリ * の戻り値が返されます。*/ $CatchErr = @mkdir($Dir[$i],0777); } @chdir($Dir[$i]); } /**作成完了後、元のディレクトリに移動します ※*/ chdir( $Location); if(!$CatchErr) { $this->Debug('Create Folder '.$this->CacheDir.' Fail'); } Return $CatchErr; }
プライベート関数CleanCacheFile() { if(file_exists($this->CacheFile)) { @chmod($this->CacheFile,777); @unlink($this->CacheFile); } /** キャッシュファイルを設定しない **/ $this->CacheFound = False; Return $this->CacheFound; }
function Debug($msg='') { if(DEBUG) { $this-> DebugMsg[] = '[キャッシュ]'.$msg; } }
function GetError() { Return empty($this->DebugMsg) ? '' : " n".implode(" n",$this->DebugMsg); } }/* 授業終了 */
?>
|