首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP 文件快取類:雜湊目錄結構與讀寫封裝

     編輯:PHP 綜合知識

設計目標

  • 避免單一目錄檔案過多影響效能,採用 MD5 雜湊建立多層子目錄。
  • 支援陣列與字串資料儲存,自動序列化/反序列化。
  • 提供建立、讀取、刪除、取得路徑等完整介面。

核心程式碼

class Cache {
    const CACHE_ROOT = '/path/to/cache/'; // 定義快取根目錄

    // 建立雜湊子目錄:MD5 取前 4 字元各為一層
    private function createHashDir($sign) {
        $md5 = md5($sign);
        $dir = '';
        for ($i = 1; $i <= 4; $i++) {
            $dir .= $md5[$i] . '/';
            $full = self::CACHE_ROOT . $dir;
            if (!is_dir($full)) mkdir($full, 0755, true);
        }
        return self::CACHE_ROOT . $dir;
    }

    // 寫入快取
    public function setCacheFile($data, $sign = 'a', $type = 'array', $id = '') {
        $cacheDir = $this->createHashDir($sign);
        if (!empty($data)) {
            $id = $id ? $id : $sign;
            $cacheFile = $cacheDir . $id . '.php';
            $content = ($type == 'array') ? var_export($data, true) : $data;
            file_put_contents($cacheFile, "");
        }
    }

    // 讀取快取
    public function getCacheFile($sign = 'a', $id = '') {
        $cacheDir = $this->createHashDir($sign);
        $id = $id ? $id : $sign;
        $cacheFile = $cacheDir . $id . '.php';
        if (is_file($cacheFile) && include_once($cacheFile)) {
            return $$sign;
        }
        return false;
    }

    // 取得快取檔案路徑
    public function getCacheFilePath($sign = 'a', $id = '') {
        $cacheDir = $this->createHashDir($sign);
        $id = $id ? $id : $sign;
        return $cacheDir . $id . '.php';
    }

    // 刪除快取
    public function delCacheFile($sign = 'a', $id = '') {
        $cacheDir = $this->createHashDir($sign);
        $id = $id ? $id : $sign;
        $cacheFile = $cacheDir . $id . '.php';
        return $this->del_file($cacheFile);
    }

    private function del_file($path) {
        return is_file($path) ? unlink($path) : false;
    }
}

使用範例

$cache = new Cache();

// 寫入陣列資料
$cache->setCacheFile(['name' => 'John', 'age' => 25], 'user', 'array', '1001');

// 讀取
$userData = $cache->getCacheFile('user', '1001');
print_r($userData);

// 刪除
$cache->delCacheFile('user', '1001');

關鍵點說明

  • 雜湊目錄深度固定 4 層,可依檔案量調整。
  • 快取檔案以 PHP 回傳變數方式儲存,include_once 可直接載入並受 opcode 快取加速。
  • 建議搭配快取過期機制(如檔案修改時間判斷)使用。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved