<?php
define(CACHE_ROOT, dirname(__FILE__)./cache); //緩存存放目錄 define(CACHE_TIME, 1800);//緩存時間 單位秒 define(CACHE_FIX,.html); $CacheName=md5($_SERVER[REQUEST_URI]).CACHE_FIX; //緩存文件名 $CacheDir=CACHE_ROOT./.substr($CacheName,0,1);//緩存文件存放目錄 $CacheUrl=$CacheDir./.$CacheName;//緩存文件的完整路徑 //GET方式請求才緩存,POST之後一般都希望看到最新的結果 if($_SERVER[REQUEST_METHOD]==GET){ //如果緩存文件存在,並且沒有過期,就把它讀出來。 if(file_exists($CacheName) && time()-filemtime($CacheName)<CACHE_TIME){ $fp=fopen($CacheName,rb); fpassthru($fp); fclose($fp); exit; } //判斷文件夾是否存在,不存在則創建 elseif(!file_exists($CacheDir)){ if(!file_exists(CACHE_ROOT)){ mkdir(CACHE_ROOT,0777); chmod(CACHE_ROOT,0777); } mkdir($CacheDir,0777); chmod($CacheDir,0777); } //回調函數,當程序結束時自動調用此函數 function AutoCache($contents){ global $CacheUrl; $fp=fopen($CacheUrl,wb); fwrite($fp,$contents); fclose($fp); chmod($CacheUrl,0777); //生成新緩存的同時,自動刪除所有的老緩存,以節約空間,可忽略。 //DelOldCache(); return $contents; } function DelOldCache(){ chdir(CACHE_ROOT); foreach (glob("*/*".CACHE_FIX) as $file){ if(time()-filemtime($file)>CACHE_TIME)unlink($file); } } //回調函數 auto_cache ob_start(AutoCache); }else{ //不是GET的請求就刪除緩存文件。 if(file_exists($CacheUrl))unlink($CacheUrl); } ?>