1.對於一般的變數,把該變數變成php語言的格式,寫到檔案中,用時只要include這個檔案就相當於載入了cache了;
2.對於array型的變數,把array轉化為php語言定義array的字串,寫到檔案中,用時也只要include就相當於載入了cache了;
3.緩衝cache時間上的控制,通過擷取快取檔案的建立時間和現在的時間進行對比,如果沒有到更新時間,直接讀取緩衝,如果到了更新時間,查詢資料庫,
檔案快取類:
| 代碼如下 |
複製代碼 |
<?php class DataCache { /** * 數群組轉換 * * @param array $array * @param string $arrayName * @param array $level * * @return string */ private function arrayEval($array, $arrayName = '', $level = 0) { $space = str_repeat("t", $level); if (empty($arrayName)) { $evaluate = "arrayn$space(n"; } else { $evaluate = "${$arrayName} = arrayn$space(n"; } $space2 = str_repeat("t", $level + 1); $comma = $space2; if (!empty($array)) { foreach ($array as $key => $val) { $key = is_string($key) ? ''' . addcslashes($key, ''\') . ''' : $key; $val = !is_array($val) && (!preg_match('/^-?[1-9]d*$/', $val) || strlen($val) > 12) ? ''' . addcslashes($val, ''\') . ''' : $val; if (is_array($val)) { $evaluate .= "$comma$key => " . arrayEval($val, '', $level + 1); } else { $evaluate .= "$comma$key => $val"; } $comma = ",n$space2"; } } $evaluate .= "n$space)"; // 最後才需要一個“;” if ($level == 0) { $evaluate .= ";"; } return $evaluate; } /** * 寫入緩衝 * * @param string $path * @param string $arrayName * @param array $data * * @return boolean */ public static function writeCache($path, $arrayName, $data) { if ($handle = fopen($path, 'w+')) { $data = self::arrayEval($data, $arrayName); $dataConvert = "<?phpn" . $data; flock($handle, LOCK_EX); $rs = fputs($handle, $dataConvert); flock($handle, LOCK_UN); fclose($handle); if ($rs !== false) { return true; } } return false; } } |
調用方法
| 代碼如下 |
複製代碼 |
/** * 組建檔案緩衝 * * @param string $filePath 快取檔案的儲存路徑 * @param string $arrayName 存放在快取檔案中的數組名稱 * @param array $data 資料 * * @return boolean */ DataCache::writeCache($filePath, $arrayName, $data); |
memcache來快取資料
面提供這個檔案快取的類,希望大家可以看看。
| 代碼如下 |
複製代碼 |
<?php /** * 檔案快取類 * 提供檔案快取 * @author guoyubin(263421949@qq.com) */ class Cache_FileCache{ /** * 設定緩衝 * @param $key 緩衝的關鍵字key * @param $data 緩衝的內容 * @param $cacheLife 緩衝時間(單位為秒)如果為0 則表示無限時間 * @return Bool */ public static function setCache($key,$data,$cacheLife) { if(file_exists(__SITE_FILE_CACHE)) { @$file = __SITE_FILE_CACHE . "/" . $key .".php"; $cache = array(); $time = __SYS_TIME; $cache['content'] = $data; $cache['expire'] = $cacheLife === 0 ? 0 : $time+$cacheLife; $cache['mtime'] = $time; $cache = serialize($cache); $setReslut = @file_put_contents($file,$cache) or self::error(__line__,"檔案寫入出錯"); $chmodReslut = @chmod($file,0777) or self::error(__line__,"設定檔案許可權失敗"); if($setReslut && $chmodReslut) { return true; } else { return false; } } } /** * 得到快取資料 * @param $key 緩衝的關鍵字key * @return array */ public static function getCache($key) { @$file = __SITE_FILE_CACHE . "/" . $key .".php"; if(file_exists($file)) { $data = @file_get_contents($file); $data = unserialize($data); if($data['expire']==0 || $data['expire'] > __SYS_TIME) { return $data['content']; } else { unlink($file); return array(); } } } /** * 刪除快取檔案 * @param $key 緩衝$key * @return Bool */ public static function delCache($key) { if (@unlink(__SITE_FILE_CACHE."/".$key.".php")) { return true; } else { return false; } } /** * 清除所有快取檔案 * @return Bool */ public static function clearAllCache() { $files = scandir(__SITE_FILE_CACHE); foreach ($files as $val) { @unlink(__SITE_FILE_CACHE."/".$val); } } /** * 出錯處理函數 * @param $line 行數 * @param $msg 資訊 */ public static function error($line,$msg) { die("出錯檔案:".__file__."/n出錯行:$line/n錯誤資訊:$msg"); } } ?> |