红穆笔记
首页 程序笔记 帝国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