php緩衝類
$oFC = new FileCache();
$sKey = 'ab_123';
$data = $oFC -> get($sKey);
if (is_null($data))
$oFC -> set($sKey, array('name' => 'ttt', 'datetime' => date('Y-m-d H:i:s')), 100000);
print_r($data);
<?phpfinal class FileCache{ /** * * * 緩衝目錄 * * * @var string */ private static $msCachePath = null; /** * * * 預設緩衝失效時間(1小時) * * * @var int */ const miEXPIRE = 3600; /** * * * 構造<br /> * self::$msCachePath 緩衝目錄為共用目錄 * * * @param string $sCachePath */ function __construct($sCachePath = './tmp/') { if (is_null(self :: $msCachePath)) self :: $msCachePath = $sCachePath; } /** * * * 讀取緩衝<br /> * 返回: 緩衝內容,字串或數組;緩衝為空白或到期返回null * * * @param string $sKey 緩衝索引值(無需做md5()) * * @return string null * * @access public */ public function get($sKey) { if (empty($sKey)) return false; $sFile = self :: getFileName($sKey); if (!file_exists($sFile)) return null; else { $handle = fopen($sFile, 'rb'); if (intval(fgets($handle)) > time()) { // 檢查時間戳記 {//未失效期,取出資料 $sData = fread($handle, filesize($sFile)); fclose($handle); return unserialize($sData); } else { // 已經失效期 fclose($handle); return null; } } } /** * 寫入緩衝 * * * * @param string $sKey 緩衝索引值 * * @param mixed $mVal 需要儲存的對象 * * @param int $iExpire 失效時間 * * @return bool * @access public */ public function set($sKey, $mVal, $iExpire = null) { if (empty($sKey)) return false; $sFile = self :: getFileName($sKey); if (!file_exists(dirname($sFile))) if (!self :: is_mkdir(dirname($sFile))) return false; $aBuf = array(); $aBuf[] = time() + ((empty($iExpire)) ? self :: miEXPIRE : intval($iExpire)); $aBuf[] = serialize($mVal); /** * 寫入檔案操作 */ $handle = fopen($sFile, 'wb'); fwrite($handle, implode("\n", $aBuf)); fclose($handle); return true; } /** * * * 刪除指定的緩衝索引值 * * * @param string $sKey 緩衝索引值 * @return bool */ public function del($sKey) { if (empty($sKey)) return false; else { @unlink (self :: getFileName($sKey)); return true; } } /** * * * 擷取快取檔案全路徑<br /> * 返回: 快取檔案全路徑<br /> * $sKey的值會被轉換成md5(),並分解為3級目錄進行訪問 * * * @param string $sKey 緩衝鍵 * * @return string * @access protected */ private static function getFileName($sKey) { if (empty($sKey)) return false; $key_md5 = md5($sKey); /** * $aFileName = array(); * $aFileName[] = rtrim(self :: $msCachePath, '/'); * $aFileName[] = $key_md5{0} . $key_md5{1}; * $aFileName[] = $key_md5{2} . $key_md5{3}; * $aFileName[] = $key_md5{4} . $key_md5{5}; * $aFileName[] = $key_md5; */ return self :: $msCachePath . '/' . $key_md5; // return implode('/', $aFileName); } /** * * * 建立目錄<br /> * * * * @param string $sDir * @return bool */ private static function is_mkdir($sDir = '') { if (empty($sDir)) return false; /** * 如果無法建立緩衝目錄,讓系統直接拋出錯誤提示 */ echo $sDir; if (!mkdir($sDir, 0666)) return false; else return true; } }