Nginx Helper 纯代码版-发布文章/评论时自动清理 Fastcgi_Cache 缓存

前阵子折腾的 fastcgi_cache,WordPress 需要安装 Nginx Helper 配套插件才可以实现发布文章/评论时自动清理 Fastcgi_Cache 缓存。插件是越装越多,能干掉一个算一个。

下面代码复制到 WordPress 主题文件 functions.php 中即可:

/**
* WordPress Nginx FastCGI缓存清理代码(Nginx-Helper纯代码版) By 张戈博客
* 文章地址:https://zhang.ge/5112.html
* 转载请保留原文出处,谢谢合作!
*/

//初始化配置
$logSwitch = 0; //配置日志开关,1为开启,0为关闭
$logFile = '/var/run/nginx-cache/purge.log'; //配置日志路径
$cache_path = '/var/run/nginx-cache'; //配置缓存路径

//清理所有缓存(仅管理员) 范例:http://www.domain.com/?purge=all
if ($_GET['purge'] == 'all' && is_user_logged_in()) {
if( current_user_can( 'manage_options' ))
{
delDirAndFile($cache_path, 0);
}
}

//缓存清理选项
add_action('publish_post', 'Clean_By_Publish', 99); //文章发布、更新清理缓存
add_action('save_post', 'Clean_By_Publish', 99); //页面修改更新清理缓存
add_action('comment_post', 'Clean_By_Comments',99); //评论提交清理缓存(不需要可注释)
add_action('comment_unapproved_to_approved', 'Clean_By_Approved',99); //评论审核清理缓存(不需要可注释)

//文章发布清理缓存函数
function Clean_By_Publish($post_ID){
$url = get_permalink($post_ID);

cleanFastCGIcache($url); //清理当前文章缓存
cleanFastCGIcache(home_url().'/'); //清理首页缓存(不需要可注释此行)

//清理文章所在分类缓存(不需要可注释以下5行)
if ( $categories = wp_get_post_categories( $post_ID ) ) {
foreach ( $categories as $category_id ) {
cleanFastCGIcache(get_category_link( $category_id ));
}
}

//清理文章相关标签页面缓存(不需要可注释以下5行)
if ( $tags = get_the_tags( $post_ID ) ) {
foreach ( $tags as $tag ) {
cleanFastCGIcache( get_tag_link( $tag->term_id ));
}
}
}

// 评论发布清理文章缓存
function Clean_By_Comments($comment_id){
$comment = get_comment($comment_id);
$url = get_permalink($comment->comment_post_ID);
cleanFastCGIcache($url);
}

// 评论审核通过清理文章缓存
function Clean_By_Approved($comment)
{
$url = get_permalink($comment->comment_post_ID);
cleanFastCGIcache($url);
}

//日志记录
function purgeLog($msg)
{
global $logFile, $logSwitch;
if ($logSwitch == 0 ) return;
date_default_timezone_set('Asia/Shanghai');
file_put_contents($logFile, date('[Y-m-d H:i:s]: ') . $msg . PHP_EOL, FILE_APPEND);
return $msg;
}

// 缓存文件删除函数
function cleanFastCGIcache($url) {
$url_data = parse_url($url);
global $cache_path;
if(!$url_data) {
return purgeLog($url.' is a bad url!' );
}

$hash = md5($url_data['scheme'].'GET'.$url_data['host'].$url_data['path']);
$cache_path = (substr($cache_path, -1) == '/') ? $cache_path : $cache_path.'/';
$cached_file = $cache_path . substr($hash, -1) . '/' . substr($hash,-3,2) . '/' . $hash;

if (!file_exists($cached_file)) {
return purgeLog($url . " is currently not cached (checked for file: $cached_file)" );
} else if (unlink($cached_file)) {
return purgeLog( $url." *** CLeanUP *** (cache file: $cached_file)");
} else {
return purgeLog("- - An error occurred deleting the cache file. Check the server logs for a PHP warning." );
}
}

/**
* 删除目录及目录下所有文件或删除指定文件
* 代码出自ThinkPHP:http://www.thinkphp.cn/code/1470.html
* @param str $path 待删除目录路径
* @param int $delDir 是否删除目录,1或true删除目录,0或false则只删除文件保留目录(包含子目录)
* @return bool 返回删除状态
*/
function delDirAndFile($path, $delDir = FALSE) {
$handle = opendir($path);
if ($handle) {
while (false !== ( $item = readdir($handle) )) {
if ($item != "." && $item != "..")
is_dir("$path/$item") ? delDirAndFile("$path/$item", $delDir) : unlink("$path/$item");
}
closedir($handle);
if ($delDir)
return rmdir($path);
}else {
if (file_exists($path)) {
return unlink($path);
} else {
return FALSE;
}
}
}

注意根据实际修改 $logFile,$cache_path 路径。

发布/更新文章、评论提交/审核,就会自动删除当前文章缓存;发布/更新文章还会清理首页、分类以及相关标签页缓存(不需要可根据代码中的注释进行屏蔽)。

另外,如果想清理全部缓存,可在管理员登陆状态下访问首页 +?purge=all 参数,比如:https://cyhour.com/?purge=all,其他用户或访客访问这个地址没有任何作用。

注意:启用 FastCGI_Cache 缓存需谨慎!!!

原文:张戈博客 - Nginx-helper 纯代码版,文章评论发布自动清理 Fastcgi 缓存

除非注明,垃圾站文章均为网络收集,本文地址 https://cyhour.com/672/,转载时烦请以链接形式注明原始出处。
声明:我们不销售主机,选主机需合法使用。任何主机需定期备份,防止数据丢失。信息以实际为准,评测仅供参考不代表权威!
🍄:Netflix 奈飞 YouTube 合租

每日必应壁纸 Bing Wallpaper – 微软官方每天自动下载必应图片自动更换桌面工具

一直在用 XP 经典壁纸,最近重装系统,想换换口味,找到了「Bing Wallpaper」,感觉还不错,每天自动换一张微软「Bing」必应最新高清精美背景图片,大多数是风景摄影作品,质量都非常高。 「Bing Wallpaper」是微软官方最近推出的免费「必应桌面壁纸」客户端……每日自动更换必应最新壁纸。 官网…

Windows 局域网共享一键修复 OKShare.bat

Windows 局域网共享一键修复批处理,兼容 Windows 10。OKShare.bat 可一键修复各种网络共享失败问题,如:本机共享无法被访问、无法访问别人共享,无法共享打印机,网络邻居、工作组无法浏览或打开缓慢等问题。 主要功能 查看网络信息 简单共享(无密码) 密码共享 共享和权限设置 …
浏览: 119 标签:  ,  ,  ,  ,  , 

1800年至2100年最早和最晚春节

为搞清春节日期最早和最晚分别会在什么时候出现,就自己编程计算了下,搜索了从1600年至2100年的所有年份,发现最早的春节出现在1月21日,而最晚的春节则出现在2月20日。其中,上一个春节日期极值点位于1985年的2月20日,下一个极值点则要到2061年的1月21日。 1800年至2100年所有春节日期(标有★号…
浏览: 28 标签:  ,  ,  ,  ,  , 
浏览: 127 标签:  ,  ,  ,  ,  , 

Comments:0

发表留言

Vultr 送$100,搬瓦工年付最低$49,优惠码 BWH3HYATVBJW,更多推荐VPS信息