网站建设

WordPress发布/更新文章、提交/审核评论自动清理VeryCloud缓存

Jager · 3月22日 · 2016年 · 3211次已读

上一篇文章分享了WordPress发布文章评论自动刷新腾讯云CDN的教程,而博客现在还用到了VeryCloud的CDN,正好有朋友在文章后面留言说VC也有刷新缓存的API,于是就利用中午的时间折腾了下,成功搞定!WordPress发布/更新文章、提交/审核评论自动清理VeryCloud缓存

下面分享一下部署方法。

/**
* WordPress 发布/更新文章、提交/审核评论自动清理VeryCloud CDN缓存(首页、分类以及当前文章) By 张戈博客
* 文章地址:https://zhang.ge/5090.html
* 转载请保留出处,谢谢合作!
**/

//发布、更新文章刷新缓存
add_action('publish_post', 'refresh_By_Publish', 0);
//提交评论刷新缓存
add_action('comment_post', 'refresh_By_Comments',0);
//审核评论刷新缓存
add_action('comment_unapproved_to_approved', 'refresh_By_Approved',0);

define('CRYPT_SALT', 'verycloud#cryptpass');
$cdn_provider = array(
	"verycdn" => array(
		"push" => "https://api3.verycloud.cn/API/cdn/refresh",
		"token" => "https://api3.verycloud.cn/API/OAuth/authorize",
		"username" => "此处填写verycloud用户名",
		"password" => "此处填写verycloud密码",
	),
);

//发布文章更新文章、分类和首页的缓存函数
function refresh_By_Publish($post_ID)
{
    $pageurl    = get_permalink($post_ID);
    $homeurl    = home_url(//res.zgboke.com/wp-content/plugins/custom-plugin/img/random/27.jpg);
    
    $category   = get_the_category();
    if($category[0]){
        //如果文章属于多个分类,默认只刷新第一个分类地址
        $caturl = get_category_link($category[0]->term_id );
        $url    = $pageurl . ',' . $caturl . ',' . $homeurl;
    } else {
        $url    = $pageurl . ',' . $homeurl;
    }
    
    $data = array(
		'type' => 'file',
		'urls' => $url
	);
    refresh($data);
}

//提交评论刷新当前文章CDN缓存
function refresh_By_Comments($comment_id)
{
    $comment = get_comment($comment_id);
    $url = get_permalink($comment->comment_post_ID);
    
    $data = array(
		'type' => 'file',
		'urls' => $url,
	);
    refresh($data);
}

//审核评论刷新当前文章CDN缓存
function refresh_By_Approved($comment)
{
    $url = get_permalink($comment->comment_post_ID);
    $data = array(
		'type' => 'file',
		'urls' => $url,
	);
    refresh($data);
}

function post_data($url, $data, $type = "POST") {
    $ch = curl_init();
  
    // 使用TLS1.0
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
    curl_setopt($ch, CURLOPT_SSLVERSION, 1); //CURL_SSLVERSION_TLSv1	

    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_HEADER, false);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_TIMEOUT, 1 );
    curl_setopt($ch, CURLOPT_POST, true);

    if ( $type == "POST" ) {
	$parm_string = http_build_query($data, '&');
	curl_setopt($ch, CURLOPT_POSTFIELDS, $parm_string);
    } else {
	curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
    }
    $output = curl_exec($ch);
    curl_close($ch);
    return $output;
}

//生成tokens
function get_verycdn_token() {
	global $cdn_provider;
	$post_data["username"] = $cdn_provider["verycdn"]["username"];
	$post_data["password"] = encrypt($cdn_provider["verycdn"]["password"]);

	$res = post_data($cdn_provider["verycdn"]["token"], $post_data);
	
	$result = json_decode($res);
	return $result->access_token;
	//var_dump($post_data);
	//var_dump($result);
}

function encrypt($txtStream) {
        //以下行中的字符串可能需要找客服提供,具体请自行试试。
	$lockstream = 'st=lDEFABCNOPyzghi_jQRST-UwxkVWXYZabcdefIJK6/7nopqr89LMmGH012345uv';
	$lockLen = strlen($lockstream);
	$lockCount = rand(0, $lockLen-1);
	$randomLock = $lockstream[$lockCount];
	$password = md5(CRYPT_SALT . $randomLock);
	$txtStream = base64_encode($txtStream);
	$tmpStream = '';
	$i = 0; $j = 0; $k = 0;
	for($i = 0; $i < strlen($txtStream); $i++) {
		$k = ($k == strlen($password)) ? 0 : $k;
		$j = (strpos($lockstream, $txtStream[$i]) + $lockCount + ord($password[$k])) % ($lockLen);
		$tmpStream .= $lockstream[$j];
		$k++;
	}
	return $tmpStream . $randomLock;
}

/**
* 提交刷新
* @param $data
* @return array
*/
function refresh($data) {
  	global $cdn_provider;
    $token = get_verycdn_token();
    if(!$token) {
      return array(
        'code' => 0,
        'message' => 'unable to get token'
      );
    }
    //刷新类型 file 文件 dir 目录
    $type = isset($data['type']) && !empty($data['type']) ? trim($data['type']) : '';
    //刷新url
    $urls = isset($data['urls']) && !empty($data['urls']) ? $data['urls'] : '';
    //url分隔符,多个url使用该符号分隔,默认,
    $partition = isset($data['partition']) && !empty($data['partition']) ? trim($data['partition']) : ',';
    if(empty($type) || empty($urls)) {
      return array(
        'code' => 0,
        'message' => 'type and urls are required',
      );
    }

    $url = $cdn_provider["verycdn"]["push"];

    $send_data = array(
      'token' => $token,
      'type' => $type,
      'urls' => $urls,
      'partition' => $partition
    );

    $return = post_data($url, $send_data);
    return $return;
}

将以上代码粘贴到WordPress主题functions.php中,然后将 19,20行对应的中文改成VeryCloud的用户名和密码,保存即可。

Ps:貌似VC的缓存刷新API暂时还没完全公开,如果需要部署这个功能,需要联系客服,然后告知需要使用这个刷新CDN缓存的API,然后提供以下用户名给他就好了。而且代码中的lockstream的值可能需要VC客服提供,如果发现上述代码无法成功,请自行咨询VC客服。

部署好了之后,可以去更新文章或提交评论,然后登陆VeryCloud云分发后台,即可看到提交记录:

WordPress发布/更新文章、提交/审核评论自动清理VeryCloud缓存

至此,说明你已部署成功。

47 条回应
  1. 陶笛100 2016-3-23 · 9:56

    CDN的好处太多了,防攻击,加速,减少带宽压力,省钱。

  2. 回梦博客 2016-3-23 · 10:07

    我之前问,说API只对企业开放,估计个人的话,要量大的才给用

    • Jager 2016-3-23 · 11:28

      可能现在又放开了吧,我找客服立马就给了。

  3. 憧憬Licoy 2016-3-23 · 13:06

    🙄 博客可以分享一下如何可以同时使用多个CDN不?

    • Jager 2016-3-23 · 19:08

      域名解析那根据线路解析到不通CDN即可,比如电信、联通、移动啥的,自己去琢磨。

      • 憧憬Licoy 2016-3-23 · 20:20

        好的,我去琢磨琢磨。

        • 禅猫 2017-1-13 · 21:22

          就是说。。你要先测试出百度,360等各cdn的线路用移动,电信,联通,等宽带访问的速度最快,然后到dns管理的地方,分别为各个宽带设置一条线路即可

  4. 西贝博客 2016-3-23 · 13:27

    CDN不是很懂

  5. 香港独立IP主机 2016-3-23 · 16:20

    WordPress最烦的就是发布、提交、审核评论这些需要手动的清理缓存才能显示出来,特别的麻烦,有了博主的分享,就方便多了

  6. 好文推荐 2016-3-23 · 20:02

    给力的说

  7. 小C博客 2016-3-23 · 21:04

    张哥,verycloud你用的感觉怎么样?

    • Jager 2016-3-23 · 21:21

      我现在就是VC,没啥异常,总体可以的。

  8. 米粒博客 2016-3-24 · 20:52

    很快的速度 我也折腾折腾

  9. 戎美慢时光快时尚的博客
    http://blog.sina.com.cn/u/5785825510

  10. vultr 2016-3-25 · 20:59

    初步接触,还在山脚转悠,楼主已经快到山顶了,仰望着!

  11. 蜗牛派 2016-3-25 · 22:44

    以后有不懂的地方还要请教博主,望不吝赐教!

  12. 操他妈 2016-3-26 · 16:07

    如何centos开机启动qrsbox

    cd /usr/local/qrsbox
    ./qrsboxcli sync &

    非常希望老师可以帮忙下,弄了2天就是不能自动启动

    • Jager 2016-3-26 · 17:06

      加入到 /etc/rc.d/rc.local 文件即可
      echo “/usr/local/qrsbox/qrsboxcli sync &” >> /etc/rc.d/rc.local

  13. 微商货源网 2016-3-26 · 16:25

    很好的文章,不错,谢谢分享

  14. 盛凯远红外理疗贴 2016-3-27 · 17:43

    虽然不懂,也要支持一下!

  15. 搬瓦工 2016-3-27 · 23:24

    可以私人使用?我去试试运气

  16. 陶笛100 2016-3-28 · 14:20

    戈兄,verycloud的缓存如何不缓存后台,问了客服不支持*通配符黑名单,也就是你百度加速的规则admin*不行,求教你是怎么设置的。还有为什么戈兄不继续用百度云加速了呢,而转用verycloud… 谢谢…

    • Jager 2016-3-28 · 18:49

      百度云加速不支持https
      你新增一个规则:
      不缓存 /wp-admin/
      就好了

  17. themebetter 2016-3-29 · 16:08

    看看,学学,理解理解。

  18. 蜂箭户外弓弩专卖 2016-3-30 · 18:43

    不知道能不能来个怎么做博客网站的文章 谢谢了

  19. 小鱼 2016-3-30 · 23:31

    请问戈老大,阿里云该如何自动更新呢?有什么教程之类的吗,谢谢!

  20. 后知后觉 2016-4-1 · 19:54

    最近腾讯的cdn好像有点问题,发工单也找不出结果,只能临时换了 😈

  21. CK 2016-4-2 · 11:43

    目前 貴博客已經部署了麼?

  22. 狂族晨曦 2016-4-2 · 11:50

    张哥,昨天我启用了CDN,跟你学的腾讯云和VeryCloud,可是发现站长统计把我自己的后台操作也统计出来了,这怎么搞?按理说这不是应该在页面插入了cnzz统计代码才会统计的到吗,有点不解。

    • Jager 2016-4-2 · 11:57

      我竟无言以对,CDN和站长统计能有啥关系?还是从页面代码排查吧

      • 狂族晨曦 2016-4-2 · 12:02

        额。。。感冒了,有点晕乎。重新看了下,发现看错了,统计到的是后台跳到前台的链接,我看成后台之间的链接了。。。白痴了一回 😕

        • Jager 2016-4-2 · 12:07

          很明显不可能有关系。

          • 狂族晨曦 2016-4-2 · 12:08

            嗯嗯,还不太放心全站CDN,有点紧张过度了,谢谢张哥。还有就是想知道怎么检查wp-admin目录有没有被CDN缓存? ❓

  23. 热腾网 2016-4-3 · 23:59

    看上去挺爽的,Jager你的博客缓存是怎么设置的?

  24. 电影迅雷下载 2016-4-12 · 23:18

    这个是不错的哦

  25. CC 2016-4-25 · 23:23

    VeryCloud 现在已不能提供API 接口了,官方回复了,不能申请了,

  26. 晨夜 2016-5-23 · 10:48

    大神 能否提供下阿里云CDN的教程呢?

  27. iot 2016-11-7 · 22:05

    求阿里云CDN配置

  28. lucki 2016-11-8 · 9:39

    请问张老师可以费心写个阿里云cdn的么,速度还是不错的,除了https请求数还得另收费

  29. IOTFen 2016-11-10 · 0:39

    张大师,我发现所有用VeryCloud的网站都无法缓存/或子目录,比如访问www.iotfen.com是miss的,而www.iotfen.com/index.html就能hit,同理www.iotfen.com/a/ 是miss的,而www.iotfen.com/a/index.html能hit,请教有没有办法解决这一难题,没有人打域名后面还加上index.html的

    • Jager 2016-11-10 · 9:30

      不是回复了你吗?换个马甲又来了。。。
      https://zhang.ge/liuyan.html

      • Lucki 2016-11-10 · 9:49

        刚申请的头像,显摆一下。 😀 缓存首页后,站内搜索功能失效了。对了,我是手机访问的这条留言,电脑端f5不出来。

        • Jager 2016-11-10 · 14:08

          把搜索功能弄成伪静态,然后在CDN排除下即可

  30. 森纯博客 2016-12-3 · 13:26

    不错,虽然不太懂
    签到成功!签到时间:下午1:23:30,每日签到,生活更精彩哦~

  31. 禅猫 2017-1-13 · 21:24

    签到成功!签到时间:21:17:02,每日签到,生活更精彩哦~
    这小玩意儿有意思

  32. 四次元悟空 2017-4-20 · 15:49

    多谢戈哥!!!经17年4月20日测试VC的API仍能正常使用,大赞一个!

  33. 明月登楼 2017-11-12 · 23:22

    悲催的,好像现在不给API了,囧!