Typecho在新增评论后刷新Cloudflare缓存
前几天的博文“设置了CF全站缓存” 中,我说有空的时候来设做一下这个功能。现在补上,咱不是只会放空炮的人。 :)
用处我大概说一下。 这样修改后,可以设置一个非常大的全站缓存时间,比如几天甚至更长。因为典型的Typecho仅在新增博文和新增评论时页面发生变更,没页面变更是不需要刷缓存的。新增博文可以博主手动刷新缓存,但新增评论就需要自动进行了。如果不这样,人家读者来发一篇评论要几天后才显示出来,胸闷坏啊。
修改 var/Widget/Base/Comments.php
在 public function insert(array $rows): int 这行前增加函数:
//调用CLOUDFLARE API刷新全站缓存,即 缓存->配置->清除所有内容 功能。 如果你不想这么暴力可以改一下参数,让gpt改就可以了,我就不写了。事实上,这段代码就是gpt写的。
private function purgeCloudflareCache($email, $apiKey, $zoneId, $purgeEverything = true, $files = []) {
$apiUrl = 'https://api.cloudflare.com/client/v4/zones/' . $zoneId . '/purge_cache';
// 构建请求负载
if ($purgeEverything) {
$payload = json_encode(['purge_everything' => true]);
} else {
$payload = json_encode(['files' => $files]);
}
// 初始化 cURL
$ch = curl_init($apiUrl);
// 设置 cURL 选项
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_POSTFIELDS, $payload);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Content-Type: application/json',
'X-Auth-Email: ' . $email,
'X-Auth-Key: ' . $apiKey,
]);
// 执行请求并获取响应
$response = curl_exec($ch);
$error = curl_error($ch);
curl_close($ch);
// 检查请求是否成功
if ($error) { //刷新有问题时把die注释取消看看怎么回事
//die('cURL Error: ' . $error);
} else {
$responseData = json_decode($response, true);
if ($responseData['success']) {
//die( 'Cache purge successful!');
} else {
//die( 'Cache purge failed: ' . $responseData['errors'][0]['message']);
}
}
}
然后,在 public function insert(array $rows): int 函数的末尾行,即 return $insertId 前面,加入一行:
$this->purgeCloudflareCache("你的cf登录email", "Global API Key", "区域ID");
这两个参数,是在这个域名的 “概述”页面,右下角,“区域ID”,和 “获取您的API令牌”->Global API Key->查看 中获得。