pbootcms模板自動清理runtime快取,自動清理快取

黄文Rex發表於2024-10-01

1. 修改控制器檔案

  1. 開啟控制器檔案: 開啟 /apps/home/controller/ExtLabelController.php 檔案。

  2. 找到現有函式: 找到以下程式碼段:

    // 測試擴充套件單個標籤
    private function test()
    {
        $this->content = str_replace('{pboot:userip}', get_user_ip(), $this->content);
    }
  3. 新增清理函式: 在 test() 函式下面新增如下程式碼:

    // 自動會話清理指令碼
    public function clean_session()
    {
        check_dir(RUN_PATH . '/archive', true);
        
        $data = json_decode(trim(substr(file_get_contents(RUN_PATH . '/archive/session_ticket.php'), 15)));
        
        if ($data->expire_time && $data->expire_time < time()) {
            ignore_user_abort(true);
            set_time_limit(7200);
            ob_start();
            ob_end_flush();
            flush();
            
            $rs = path_delete(RUN_PATH . '/session');
            
            if ($rs) {
                $data->expire_time = time() + 60 * 60 * 24; // 下一次清理時間
                create_file(RUN_PATH . '/archive/session_ticket.php', "<?php exit();?>".json_encode($data), true);
            }
        } else {
            $data->expire_time = time() - 60 * 60 * 24; // 初始化清理時間
            create_file(RUN_PATH . '/archive/session_ticket.php', "<?php exit();?>".json_encode($data), true);
        }
    }

2. 在模板檔案中呼叫清理函式

  1. 選擇模板檔案: 選擇一個常用的模板檔案,如 foot.html(通用底部)或 head.html(通用頭部)。

  2. 新增呼叫程式碼: 在模板檔案中新增如下程式碼:

    <?php
    if (!isset($_GET['no_clean'])) {
        include_once APP_PATH . '/home/controller/ExtLabelController.php';
        $controller = new \app\home\controller\ExtLabelController();
        $controller->clean_session();
    }
    ?>

3. 建立初始清理檔案

  1. 建立初始清理檔案: 在 runtime/archive 目錄下建立一個初始清理檔案 session_ticket.php,內容如下:
    <?php exit();?>
    {"expire_time":<?php echo time() - 60 * 60 * 24; ?>} // 初始化清理時間

4. 驗證清理功能

  1. 訪問網站: 訪問網站,確保每次訪問時都會觸發清理指令碼。

  2. 檢查日誌: 檢查日誌檔案或監控系統,確保清理指令碼按預期工作。

透過以上步驟,你可以實現 PbootCMS 的自動清理 runtime 快取功能,確保系統穩定執行並釋放空間。

相關文章