NIUBI
wordpress教程

WordPress 代码实现发布文章时实时刷新腾讯 CDN 缓存

9个月前/ 81/ / WP爱好者/ 已收录/
导语: 我们在优化 WordPress 速度的时候,CDN 是个不错的选择,但是在 CDN 缓存过期之前,我们即使更新了文章也是看不到变化的,还好腾讯 CDN 提供了 api 方式刷新缓存,我们可以使用 WordPress 的动作钩子,同步刷新 cdn 缓存,下面是 WordPress 代码实现发布文章时刷新腾讯 CDN 缓存的过程,需要的朋友试试吧。

我们在优化 WordPress 速度的时候,CDN 是个不错的选择,但是在 CDN 缓存过期之前,我们即使更新了文章也是看不到变化的,还好腾讯 CDN 提供了 api 方式刷新缓存,我们可以使用 WordPress 的动作钩子,同步刷新 cdn 缓存,下面是 WordPress 代码实现发布文章时刷新腾讯 CDN 缓存的过程,需要的朋友试试吧。

写在前面

要实现这个发布文章时实时刷新腾讯 CDN 缓存功能,需要你配置了腾讯 CDN 缓存整个页面才行,下面我就用缓存 WP 爱好者博客首页来做例子。

获取 api 密匙

使用腾讯云的 api 需要先获取密匙,这个密匙可以使用腾讯云的所有 api,并不只是 cdn。获取地址:https://console.qcloud.com/cam/capi

注意:这个密匙可以操作所有腾讯云产品,注意保护密匙,别泄露了。

请求参数说明

请求方式:post 或 get

请求地址:https://cdn.api.qcloud.com/v2/index.php

get 请求体示例:

https://cdn.api.qcloud.com/v2/index.php? Action=RefreshCdnUrl &SecretId=XXXXXXXXXXXXXXXXXX &Timestamp=1462521223 &Nonce=123456789 &Signature=XXXXXXXXXXXXXXXXXXXXXXXXXXXXX &urls.0=https%3A%2F%2www.test.com%2F1.jpg

post 请求体示例:

array (   'Action' => 'RefreshCdnUrl',   'SecretId' => 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXX',   'Timestamp' => 1462864833,   'Nonce' => 1149033341,   'Signature' => 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXX',   'urls.0' => 'https://www.test.com/1.jpg' )

WordPress 发布文章实时刷新 cdn

在你的主题 functions.php 文件中加入如下代码:

<?php  //刷新方法 function refresh_txcdn_cache(){ $secretKey='key';//后台获取 $secretId='id';//后台获取 $action='RefreshCdnUrl'; //刷新地址自行修改 $PRIVATE_PARAMS = array(                 'urls.0'=> 'https://www.daimadog.com/',                 );  $HttpUrl="cdn.api.qcloud.com"; $HttpMethod="POST"; $isHttps =true; $COMMON_PARAMS = array(                 'Nonce' => rand(),                 'Timestamp' =>time(NULL),                 'Action' =>$action,                 'SecretId' => $secretId,                 ); CreateRequest($HttpUrl,$HttpMethod,$COMMON_PARAMS,$secretKey, $PRIVATE_PARAMS, $isHttps); } //发布文章是执行刷新函数 add_action( 'publish_post', 'refresh_txcdn_cache' ); function CreateRequest($HttpUrl,$HttpMethod,$COMMON_PARAMS,$secretKey, $PRIVATE_PARAMS, $isHttps) {         $FullHttpUrl = $HttpUrl."/v2/index.php";         /***************对请求参数 按参数名 做字典序升序排列,注意此排序区分大小写*************/         $ReqParaArray = array_merge($COMMON_PARAMS, $PRIVATE_PARAMS);         ksort($ReqParaArray);         $SigTxt = $HttpMethod.$FullHttpUrl."?";          $isFirst = true;         foreach ($ReqParaArray as $key => $value)         {                 if (!$isFirst)                  {                         $SigTxt = $SigTxt."&";                 }                 $isFirst= false;                  /*拼接签名原文时,如果参数名称中携带 _,需要替换成.*/                 if(strpos($key, '_'))                 {                         $key = str_replace('_', '.', $key);                 }                  $SigTxt=$SigTxt.$key."=".$value;         }          /*********************根据签名原文字符串 $SigTxt,生成签名 Signature******************/         $Signature = base64_encode(hash_hmac('sha1', $SigTxt, $secretKey, true));           /***************拼接请求串,对于请求参数及签名,需要进行 urlencode 编码********************/         $Req = "Signature=".urlencode($Signature);         foreach ($ReqParaArray as $key => $value)         {                 $Req=$Req."&".$key."=".urlencode($value);         }          /*********************************发送请求********************************/         if($HttpMethod === 'GET')         {                 if($isHttps === true)                 {                         $Req="https://".$FullHttpUrl."?".$Req;                 }                 else                 {                         $Req="http://".$FullHttpUrl."?".$Req;                 }                  $Rsp = file_get_contents($Req);          }         else         {                 if($isHttps === true)                 {                         $Rsp= SendPost("https://".$FullHttpUrl,$Req,$isHttps);                 }                 else                 {                         $Rsp= SendPost("http://".$FullHttpUrl,$Req,$isHttps);                 }         }       //输出返回数据       //  var_export(json_decode($Rsp,true)); }  function SendPost($FullHttpUrl, $Req, $isHttps) {         $ch = curl_init();         curl_setopt($ch, CURLOPT_POST, 1);         curl_setopt($ch, CURLOPT_POSTFIELDS, $Req);          curl_setopt($ch, CURLOPT_URL, $FullHttpUrl);         curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);         if ($isHttps === true) {                 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,  false);                 curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,  false);         }          $result = curl_exec($ch);          return $result; } ?>

将上面代码复制到你的 functions.php 文件中,发布一篇测试文章后,去腾讯 cdn 控制面板,可以看到刷新记录,如下图:

 

WordPress 代码实现发布文章时实时刷新腾讯 CDN 缓存

注意:上面我用的文章发布动作执行刷新函数,你可以改成你想要的,比如保存文章、更新文章、新评论等等。
add_action( 'publish_post', 'refresh_txcdn_cache' );

点点赞赏,手留余香

还没有人赞赏,快来当第一个赞赏的人吧!
admin给Admin打赏
×
予人玫瑰,手有余香
  • 2
  • 5
  • 10
  • 20
  • 50
2
支付
收藏 0 海报

版权归属:本文为原创文章,版权归 所有

本文链接:( 欢迎分享本文,转载请保留出处 )

免责声明:如发现本站有涉嫌抄袭侵权/违法违规的内容,请邮件/留言反馈,一经查实本站将立刻删除!

<< 上一篇

2020-06-08

下一篇 >>

2020-06-08

全部评论( 0 条 )
扫一扫二维码分享