当前所在位置: 首页>>百科全书

WordPress自动生成首页静态缓存

发布时间:2025-10-19 15:48:26 本站作者 【 字体: 】 浏览:50 次

代码来自于wp super cache插件,由本站处理成仅缓存首页的代码版本。

生成首页缓存代码

<?php
 // 只缓存首页
define('CACHE_FOLDER', ABSPATH.'/cache'); //  定义根目录/cache/ 文件夹 
define('CACHE_DIR', dirname(__FILE__).'/cache/'.$_SERVER['HTTP_HOST']); // 缓存目录 —— cache.php所在目录/cache/服务器域名
define('CACHE_CYC', 86400); //缓存文件的周期,单位秒,86400秒是一天,到期则清除
define('CACHE_SUFFIX','.html');  //缓存文件的后缀,不要用 .php .asp .jsp .pl 等
//首页以index.html缓存 
if($_SERVER['REQUEST_URI'] == '/'){ // 如果请求的是首页
    $file_name  = "index".CACHE_SUFFIX; // 文件名为 index+后缀
    $cache_dir  = CACHE_DIR; // 缓存路径赋值
}
else { // 如果不是首页
    return ;  //终止, 下面的代码就不需要执行了。
}
$cache_file = $cache_dir.'/'.$file_name; // 缓存文件
$backlist = '/(?s=|%|feed|map|page|404|xml|txt|tag|author)/'; // 缓存链接黑名单:黑名单中的字符将不被缓存,若要添加更多请用分隔符 | 隔开:
if($_SERVER['REQUEST_METHOD']=='GET' && !preg_match_all($backlist,$_SERVER['REQUEST_URI'],$matches)){  // 若是GET请求 并且不在黑名单中
    if(file_exists($cache_file) && time() - filemtime($cache_file) < CACHE_CYC){   //如果缓存文件存在,并且没有过期,就把它读出来
        $fp = fopen($cache_file,'rb'); // 以只读方式打开缓存文件
        fpassthru($fp); // 返回缓存文件字符数
        fclose($fp); // 关闭缓存文件
        exit();
    }
    elseif(!file_exists(CACHE_FOLDER)){ // 若cache文件夹不存在
        mkdir(CACHE_FOLDER,0777); // 创建cache文件夹,权限设置为777
        chmod(CACHE_FOLDER,0777); // 检查cache文件夹权限是否为777
        mkdir(CACHE_DIR,0777); // 创建缓存目录,权限设置为777
        chmod(CACHE_DIR,0777); // 检查缓存目录权限是否为777
    }
    elseif(!file_exists(CACHE_DIR)){ // 若缓存目录不存在
        mkdir(CACHE_DIR,0777); // 创建缓存目录,权限设置为777
        chmod(CACHE_DIR,0777); // 检查缓存目录权限是否为777
    }
    function auto_cache($contents){  //函数:自动缓存,当程序结束时自动调用此函数
       $auto_cachefiles = CACHE_DIR."/index".CACHE_SUFFIX;  // 重新赋值缓存文件
        $fp = fopen($auto_cachefiles,'wb');  // 以可写方式打开缓存文件
        fwrite($fp,$contents); // 写入缓存文件
        fclose($fp); // 关闭缓存文件
        chmod($auto_cachefiles,0777); // 检查缓存目录权限是否为777
        clean_old_cache();   //生成新缓存的同时,自动删除所有的旧缓存
        return $contents;
    }
    function clean_old_cache(){ // 函数:清理旧缓存
        chdir(CACHE_DIR); // 指定需要清理的目录
        foreach (glob("*/*".CACHE_SUFFIX) as $file){ // 遍历所有满足后缀的文件
           if(time()-filemtime($file)>CACHE_CYC){ // 大于缓存时间周期的
               unlink($file); // 删除文件
           }
        }
    }
    ob_start('auto_cache');  // 执行 auto_cache 缓存函数
}
else{
    if(file_exists($cache_file)){    // file_exists() 函数检查文件或目录是否存在。
        unlink($cache_file);    // 若不是GET的请求则删除缓存文件。
    }
}
?>

以上代码保存为一个cache.php文件,放在网站根目录,并且在根目录的index.php的<?php下一行添加引用代码:

require('cache.php');

在根目录新建一个cache文件夹,权限设置为777可写。不新建也行,代码会自动创建,然后刷新首页就会在cache文件夹生成首页缓存了!

前端手动更新首页缓存

思路:利用前端ajax方法POST一个值给cache.php接收,由cache.php处理删除旧缓存/

js代码

//绑定前端页面点击元素id为delcache时将清理并更新该页面缓存
$(function(){
    $("#delcache").click(function(){ // 请在前端添加id为delcache的元素标签
            cacheUpdata();
    });
});
 
//异步请求cache.php文件 更新缓存
function cacheUpdata(){
    $.ajax({       
        url: '/cache.php',  //请求对象所在的url:cache.php 路径不要搞错
        type:'POST',
        data:{
            "action": "delcache", // 后端传参值
        },
        cache: false,
        error: function(){
            alert('发生意外错误!');
            return false;
        },
        success:function(){
            alert('OK. 确定后更新缓存!');
            location.reload(true); // 刷新页面
        }
    });
}

加入cache.php的代码

上面生成缓存已经有一段代码了,下面这个删除缓存的代码必须加在生成缓存的代码之上。用来接收ajax请求传过来的POST对象参数

//缓存更新
if(isset($_POST@['action'])){ // POST传参对象
    if($_POST@['action'] == 'delcache'){ // 前端js通过POST方法传过来的值
        $cachefile = dirname(__FILE__)."/cache/".$_SERVER['HTTP_HOST']."/index.html"; // 缓存文件 —— cache.php所在目录/cache/服务器域名/index.html
        if (file_exists($cachefile)) {
            unlink($cachefile);
        }
    }
    exit();
}

发布、更新文章时,删除首页缓存

将以下代码丢到functions.php中即可

<?php
//发布、更新文章时,删除首页缓存
add_action('publish_post', 'DelHomeCache');
add_action('delete_post', 'DelHomeCache');
add_action('post_updated', 'DelHomeCache');
add_action('publish_page', 'DelHomeCache');
function DelHomeCache($post_ID){
    $home_cache = ABSPATH ."/cache/".$_SERVER['HTTP_HOST']."/index.html"; // ABSPATH 为根目录服务器绝对路径常量
    if (file_exists($home_cache)) {
        unlink($home_cache);
    }
}
?>

配合以上静态首页的.htaccess定向规则

以下代码来自wp super cache的规则写入方法,我精简掉了一些。

# BEGIN HomeCache
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
AddDefaultCharset UTF-8
RewriteCond %{REQUEST_METHOD} !POST
RewriteCond %{QUERY_STRING} !.*=.*
RewriteCond %{HTTP:Profile} !^[a-z0-9"]+ [NC]
RewriteCond %{HTTP_USER_AGENT} !^.*(2.0 MMP|240x320|400X240|AvantGo|BlackBerry|Blazer|Cellphone|Danger|DoCoMo|ElAIne/3.0|EudoraWeb|Googlebot-Mobile|hiptop|IEMobile|KYOCERA/WX310K|LG/U990|MIDP-2.|MMEF20|MOT-V|NetFront|Newt|Nintendo Wii|Nitro|Nokia|Opera Mini|Palm|PlayStation Portable|portalmmm|Proxinet|ProxiNet|SHARP-TQ-GX10|SHG-i900|Small|SonyEriCSSon|Symbian OS|SymbianOS|TS21i-10|UP.Browser|UP.Link|webOS|Windows CE|WinWAP|YahooSeeker/M1A1-R2D2|iPhone|iPod|Android|BlackBerry9530|LG-TU915 Obigo|LGE VX|webOS|Nokia5800).* [NC]
RewriteCond %{HTTP_user_agent} !^(w3c |w3c-|acs-|alav|alca|amoi|audi|avan|benq|bird|blac|blaz|brew|cell|cldc|cmd-|dang|doco|eric|hipt|htc_|inno|ipaq|ipod|jigs|kddi|keji|leno|lg-c|lg-d|lg-g|lge-|lg/u|maui|maxo|midp|mits|mmef|mobi|mot-|moto|mwbp|nec-|newt|noki|palm|pana|pant|phil|play|port|prox|qwap|sage|sams|sany|sch-|sec-|send|seri|sgh-|shar|sie-|siem|smal|smar|sony|sph-|symb|t-mo|teli|tim-|tosh|tsm-|upg1|upsi|vk-v|voda|wap-|wapa|wapi|wapp|wapr|webc|winw|winw|xda |xda-).* [NC]
RewriteCond %{HTTPS} !on
RewriteCond %{DOCUMENT_ROOT}/cache/%{SERVER_NAME}/$1/index.html -f
RewriteRule ^(.*) "/cache/%{SERVER_NAME}/$1/index.html" [L]
</IfModule>
# END HomeCache

关键是最后两句,路径不要搞错了。

到17ce.com的测速结果

2015-06-28_17ce

还不错吧?!赶快试试吧!


上一篇:WordPress使用.htaccess防盗链的方法

下一篇:WordPress自动生成首页静态缓存集成到主题

最新发布
Office2024激活密钥分享,2026年Office 2024专业增强版密钥分享

Office2024激活密钥分享,2026年Office 2024专业增强版密钥分享

Office2024激活密钥分享,2026年Office 2024专业增强版密钥分享
Office2024激活密钥分享:2026年Office 2024专业增强版密钥分享产品密钥:604C7-MN692-PBMVK-7GYQ8-Q7DTD类型描述:Office_ProPlus2024VL_MAK_AE2错误代码:在线密钥剩余次数:138288产品密钥:XYNT8-B0HK4-3VHM-T8PHJ-4VY20类型描述:Office_ProPlus2024VL_MAK_AE2错误代码:在线密钥剩余次数:138288产品密钥:74]MX-0NM6T_YDVF2-P...
visio 2016 永久激活密钥 visio 2016专业版激活码 正版 visio 2016 零售版产品密钥

visio 2016 永久激活密钥 visio 2016专业版激活码 正版 visio 2016 零售版产品密钥

visio 2016 永久激活密钥 visio 2016专业版激活码 正版 visio 2016 零售版产品密钥
有用户找小编要最新 visio 2016 激活密钥,visio 2016 是一个独立组件,如果安装了正版 visio 2016 专业版,需要 visio 专业版 2016 密钥激活。激活 visio 2016 有两种秘钥,一种是 visio 2016 永久激活码,一种是 visio2016 kms 安装密钥,kms 激活密钥是半年期限,但是永久免费使用。这边小编为...
office2016专业增强版密钥,office2016专业版激活秘钥分享(亲测可用)

office2016专业增强版密钥,office2016专业版激活秘钥分享(亲测可用)

office2016专业增强版密钥,office2016专业版激活秘钥分享(亲测可用)
office2016专业增强版是一款办公必备软件,而在安装完成之后,都是需要通过官方提供的激活密钥来进行激活认证,但是如果没有激活的话只有30天试用期,期限一过就不能用了,为此,小编这就给大家分享一下office2016专业增强版激活密钥及最新激活码供大家参考,同时支持32位和64位。说明:因为密钥的特性不能保证100%激活,此...
Office2016激活密钥,Office2016专业版/家庭和学生版密钥

Office2016激活密钥,Office2016专业版/家庭和学生版密钥

Office2016激活密钥,Office2016专业版/家庭和学生版密钥
Office2016是现在大家主要使用的Office版本,当然了在安装完成之后最重要的是激活,网上有非常多的Office2016激活具,但是如果你不喜欢KMS激活,那么可以看看这里有没有你需要的Office2016永久激活MAK KEY密钥。本站时刻保持更新。<img alt="【最新】Office2016激活密钥" office2016专业版="" 家庭和...