快取目的:將數據置於訪問更快的位置。記憶體最快但容量有限,檔案快取為折中方案。本文實作一個以檔案為儲存介質、支援過期時間與鎖機制的快取類。
private $cache_dir; // 快取目錄 private $expireTime = 180; // 過期秒數
public function __construct($cache_dirname) {
if (!@is_dir($cache_dirname)) {
if (!@mkdir($cache_dirname, 0777)) {
$this->warn('快取目錄不存在且無法建立,請手動建立。');
return false;
}
}
$this->cache_dir = $cache_dirname;
}
cache_page()fopen 開啟檔案,flock(LOCK_EX) 獨佔鎖。fwrite 寫入資料(可先 serialize() 序列化陣列/物件)。flock(LOCK_UN) 釋放鎖,fclose 關閉。display_cache()fopen('r')、fread 全讀、fclose。unserialize() 還原。readData()public function readData($cacheFile = 'default_cache.txt') {
$cacheFile = $this->cache_dir . '/' . $cacheFile;
if (file_exists($cacheFile) && filemtime($cacheFile) > (time() - $this->expireTime)) {
$data = $this->display_cache($cacheFile);
} else {
$data = "從資料庫獲取數據..."; // 實際從 DB 查詢
$this->cache_page($cacheFile, $data);
}
return $data;
}
邏輯:檔案存在且未過期 → 讀取快取;否則 → 獲取原始數據 → 寫入快取 → 返回數據。
本類針對 PHP 5+,利用建構子/解構子、私有屬性、異常處理等 OOP 特性。