红穆笔记
首頁 程序筆記 帝國cms PHP緩存網頁代碼 加速訪問
程序筆記 帝國cms

帝國cms PHP緩存網頁代碼 加速訪問

帝国cms PHP缓存网页代码 加速访问

化後的緩存文件。

適用於任何php網站。

從根本解決你網站速度問題!

<?php

/******************
require(ECMS_PATH . 'cache/content.php');
*******************************************/
//緩存存放目錄
define('CACHE_ROOT', dirname(__FILE__) . DIRECTORY_SEPARATOR . 'cacheFile'); 
//緩存文件後綴
define('CACHE_FIX','.php');

date_default_timezone_set("Asia/Shanghai");

// 獲取當前URL路徑信息
$query_string = $_SERVER['QUERY_STRING'];

// 解析路徑,獲取頂級欄目
$url_path = '';
if (!empty($query_string)) {
    // 解析查詢字符串,去除參數部分
    $query_parts = explode('&', $query_string);
    // 假設第一個參數是路徑信息(根據ThinkPHP的路由規則)
    $first_param = $query_parts[0];
    if (strpos($first_param, '/') !== false) {
        $url_path = $first_param;
    } else {
        // 如果不是路徑形式,可能是參數,則根據實際情況處理
        $url_path = $query_string;
    }
}

// 提取頂級欄目
$top_category = 'index'; // 默認爲首頁
if (!empty($url_path)) {
    // 移除可能的文件擴展名
    $url_path = preg_replace('/\.(html|htm|php)$/i', '', $url_path);
    
    // 按斜槓分割路徑
    $path_parts = explode('/', $url_path);
    
    // 獲取第一個非空的部分作爲頂級欄目
    foreach ($path_parts as $part) {
        if (!empty($part)) {
            $top_category = $part;
            break;
        }
    }
    
    // 如果頂級欄目包含特殊字符或過長,使用md5簡化
    if (strlen($top_category) > 50 || preg_match('/[^\w\-\.]/', $top_category)) {
        $top_category = md5($top_category);
    }
}

// 生成緩存文件名和路徑
$cache_key = md5($_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']);
$CacheName = $cache_key . CACHE_FIX;

// 計算子目錄(md5倒數第一個字符)
$sub_dir = substr($cache_key, -1, 1);

// 構建完整的緩存目錄和路徑
$CacheDir = CACHE_ROOT . DIRECTORY_SEPARATOR . $top_category . DIRECTORY_SEPARATOR . $sub_dir;
$CacheUrl = $CacheDir . DIRECTORY_SEPARATOR . $CacheName;

// 檢查緩存是否存在
if(file_exists($CacheUrl)){ 
    echo str_replace("{time181}",date("Y-m-d h:i:m",time()-1440),gzuncompress(file_get_contents($CacheUrl)));
    exit; 
}

// 創建緩存目錄(如果需要)
if(!file_exists($CacheDir)){ 
    // 創建緩存根目錄
    if(!file_exists(CACHE_ROOT)){ 
        mkdir(CACHE_ROOT,0777, true); 
        chmod(CACHE_ROOT,0777); 
    }
    
    // 創建頂級欄目目錄
    $top_category_dir = CACHE_ROOT . DIRECTORY_SEPARATOR . $top_category;
    if(!file_exists($top_category_dir)) {
        mkdir($top_category_dir,0777, true); 
        chmod($top_category_dir,0777); 
    }
    
    // 創建子目錄
    mkdir($CacheDir,0777, true); 
    chmod($CacheDir,0777); 
}

// 緩存輸出函數
function AutoCache($contents){ 
    global $CacheUrl; 
    $fp = fopen($CacheUrl,'wb'); 
    $contents = "<!--緩存插件作者QQ:181021679  ".(date("Y-m-d H:i:s", time()))."-->\r\n" . $contents;
    fwrite($fp, gzcompress($contents)); 
    fclose($fp); 
    chmod($CacheUrl,0777); 
    return str_replace("{time181}", date("Y-m-d h:i:m",time()-1440), $contents);
}

ob_start('AutoCache');
clearstatcache();

更新後的版本。

<?php
/******************
require(ECMS_PATH . '/cache.php');
*******************************************/
if (1 == 1) {
    // 緩存存放目錄
    define('CACHE_ROOT', dirname(dirname(__FILE__)) . DIRECTORY_SEPARATOR . 'cacheFile');
    // 緩存文件後綴
    define('CACHE_FIX', '.php');

    date_default_timezone_set("Asia/Shanghai");

    // 創建緩存根目錄(如果不存在)
    if (!file_exists(CACHE_ROOT)) {
        if (!mkdir(CACHE_ROOT, 0755, true)) {
            error_log('無法創建緩存目錄: ' . CACHE_ROOT);
        } else {
            chmod(CACHE_ROOT, 0755);
        }
    }

    /**
     * 頁面類型識別(用於分目錄存儲)
     */
    function getPageType() {
        $requestUri = $_SERVER['REQUEST_URI'];
        $scriptName = $_SERVER['SCRIPT_NAME'];

        if (strpos($scriptName, 'index.php') !== false || $requestUri === '/' || $requestUri === '/index.php') {
            return 'index';
        }
        if (strpos($requestUri, '/singer/') !== false) {
            return 'singer';
        }
        if (strpos($requestUri, '/jieshuo/') !== false) {
            return 'jieshuo';
        }
        if (strpos($scriptName, 'content.php') !== false || strpos($requestUri, '/lyrics/') !== false) {
            return 'content';
        }
        if (strpos($scriptName, 'list.php') !== false || strpos($requestUri, '/list/') !== false) {
            return 'list';
        }
        if (strpos($scriptName, 'search.php') !== false) {
            return 'search';
        }
        return 'other';
    }

    /**
     * 獲取緩存文件路徑
     */
    function getCacheFileName() {
        $pageType = getPageType();
        $cacheKey = md5($_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']) . CACHE_FIX;
        $cacheDir = CACHE_ROOT . DIRECTORY_SEPARATOR . $pageType . DIRECTORY_SEPARATOR . substr($cacheKey, 0, 1);
        $cacheFile = $cacheDir . DIRECTORY_SEPARATOR . $cacheKey;
        return [
            'dir' => $cacheDir,
            'file' => $cacheFile,
            'type' => $pageType
        ];
    }

    /**
     * 讀取緩存內容(直接解壓,無元數據)
     */
    function readCache($cacheFile) {
        if (!file_exists($cacheFile)) {
            return false;
        }
        $compressed = file_get_contents($cacheFile);
        if ($compressed === false) return false;
        $decompressed = @gzuncompress($compressed);
        if ($decompressed === false) return false;
        return $decompressed;
    }

    /**
     * 寫入緩存內容
     * 在內容最前面添加緩存生成時間的HTML註釋
     */
    function writeCache($cacheFile, $content) {
        $dir = dirname($cacheFile);
        if (!file_exists($dir)) {
            mkdir($dir, 0755, true);
        }
        // 添加頭部註釋,記錄緩存生成時間
        $header = '<!-- 緩存生成時間:' . date('Y-m-d H:i:s') . ' -->' . "\n";
        $compressed = gzcompress($header . $content);
        return file_put_contents($cacheFile, $compressed) !== false;
    }

    /**
     * 生成僞發佈時間(近三天內,同頁面同一天不變)
     */
    function getTime181Value() {
        $today = date('Y-m-d');
        $url = $_SERVER['REQUEST_URI'];
        $seed = $url . $today;
        $hash = md5($seed);
        $hex = substr($hash, 0, 8);
        $offset = hexdec($hex) % 172800; // 0~2天的秒數
        $base = strtotime($today . ' 00:00:00');
        $fakeTime = $base - $offset;
        return date('Y-m-d H:i:s', $fakeTime);
    }

    $cacheInfo = getCacheFileName();
    $CacheDir = $cacheInfo['dir'];
    $CacheUrl = $cacheInfo['file'];
    $pageType = $cacheInfo['type'];

    // 緩存命中:直接讀取並輸出,不做任何元數據更新
    if (http_response_code() === 200 && file_exists($CacheUrl)) {
        $content = readCache($CacheUrl);
        if ($content !== false) {
            // 替換佔位符後輸出(注意:緩存中已包含頭部註釋)
            echo str_replace("{time181}", getTime181Value(), $content);
            exit;
        }
    }

    // 創建緩存子目錄(若不存在)
    if (!file_exists($CacheDir)) {
        if (!mkdir($CacheDir, 0755, true)) {
            error_log('無法創建緩存子目錄: ' . $CacheDir);
        } else {
            chmod($CacheDir, 0755);
        }
    }

    /**
     * 自動緩存回調:替換佔位符並寫入緩存(寫入時會自動添加頭部註釋)
     */
    function AutoCache($contents) {
        global $CacheUrl;

        // 替換佔位符爲僞發佈時間
        $replaced = str_replace("{time181}", getTime181Value(), $contents);

        // 僅當狀態碼爲200且內容非空時緩存
        if (http_response_code() === 200 && !empty($replaced)) {
            writeCache($CacheUrl, $replaced);
        }

        return $replaced;
    }

    ob_start('AutoCache');
    clearstatcache();
}
?>

 

微信赞赏

微信

支付宝赞赏

支付寶

✍️ 作者: 紅穆

網站管理員 · 感謝閱讀,更多精彩內容敬請關注

作者主頁 查看主頁 →

相關文章

帝国CMS数据库语句&amp;SQL语句格式

帝國CMS數據庫語句&amp;SQL語句格式 程序筆記 帝國cms

帝國CMS擴展SQL程序編寫介紹,帝國CMS數據庫語句&SQL語句格式基本範例:說明:下面例子都是以PHP文件放在系統根目錄爲基準。例1:連接MYSQL程序。(a.php)&lt;?php require('e/class/connect.php'); //引入數據庫配置文件和公共函數文件 requ…
👁 351
帝国CMS获取系统COOKIE变量函数getcvar()

帝國CMS獲取系統COOKIE變量函數getcvar() 程序筆記 帝國cms

取得系統COOKIE變量函數語法:getcvar($var,$ecms)說明:$var:爲變量名$ecms:0爲設置前臺COOKIE變量,1爲設置後臺COOKIE變量。此參數可省略,默認爲0。使用範例:getcvar('mlusername'),取得前臺登陸會員的用戶名getcvar('loginu…
👁 295
帝国CMS灵动标签调用字段大全

帝國CMS靈動標籤調用字段大全 程序筆記 帝國cms

將所有支持靈動標籤調用的字段收集歸類帝國CMS靈動標籤: [e:loop={欄目ID/專題ID,顯示條數,操作類型,只顯示有標題圖片,附加SQL條件,顯示排序}] 模板代碼內容 [/e:loop]調用時間:&lt;?=date('m-d',$bqr[newstime])?&gt; &lt;?=dat…
👁 3749

推薦閱讀

响应式园林景观绿化设计企业网站模板 0491

響應式園林景觀綠化設計企業網站模板 0491 實用收藏 易優模板

一款針對園林景觀綠化設計企業的eyoucms響應式網站模板。設計風格自然藝術,能夠展示景觀設計作品、綠化工程、植物配置及設計理念。有助於園林設計公司在線上展示實力,吸引高端項目客戶。模板展示 安裝說明 網站後臺:/login.php 賬號:admin 密碼:admin 相關文章易優CMS安裝常見問題…
👁 64
响应式会计税务事务所网站模板 0492

響應式會計稅務事務所網站模板 0492 實用收藏 易優模板

此套eyoucms響應式模板適用於會計與稅務事務所,設計風格專業嚴謹,能夠展示會計服務、稅務代理、成功案例及企業實力。有助於財稅服務機構在線上展示品牌,吸引企業客戶。模板展示 安裝說明 網站後臺:/login.php 賬號:admin 密碼:admin 相關文章易優CMS安裝常見問題總結易優CMS(…
👁 33
响应式简约民宿客栈网站模板 0493

響應式簡約民宿客棧網站模板 0493 實用收藏 易優模板

一款針對簡約民宿客棧的eyoucms響應式網站模板。設計風格溫馨簡約,能夠展示民宿環境、客房設施、旅遊服務及在線預訂。有助於民宿在線上吸引遊客,提升品牌知名度。模板展示 安裝說明 網站後臺:/login.php 賬號:admin 密碼:admin 相關文章易優CMS安裝常見問題總結易優CMS(Eyo…
👁 36
资源网站typecho001模板

資源網站typecho001模板 程序筆記 Typecho

typecho001模板板本請勿修改本模板文件夾名稱 文件夾名稱爲:typecho001 1.4修復文章頁面js輸出問題1.3修復未安裝插件時的報錯提示優化列表頁代碼輸出1.2修復評論功能增加自定義首頁標題1.1修復評論回覆不對稱功能添加首頁單獨的標題設置功能增加網站favicon.ico圖標增加一…
👁 198
响应式营销策划文化传媒公司网站模板 0494

響應式營銷策劃文化傳媒公司網站模板 0494 實用收藏 易優模板

此套eyoucms響應式模板適用於營銷策劃與文化傳媒公司,設計風格創意營銷,能夠展示品牌策劃案例、文化傳媒服務、創意活動及成功案例。有助於文化傳媒公司在線上展示專業實力,吸引品牌客戶。模板展示 安裝說明 網站後臺:/login.php 賬號:admin 密碼:admin 相關文章易優CMS安裝常見問…
👁 43
typecho分页样式的修改

typecho分頁樣式的修改 程序筆記 Typecho

大人,時代變了!目前typecho最完美的解決方案了,因爲百度只能看到固定思維的代碼。實際生成的html代碼,乾淨到讓人窒息完全的自定義,包括給li元素加上class,給a元素加上class,給上一頁下一頁加上class,去除typecho自帶用於表示更多的li標籤。甚至裏面的內容我也能添加一些文字…
👁 517