cloudflare便利っすね。
但し、自分で運用する分には良いのですが、画像やCSSがキャッシュされるので、更新する人が別にいると不便です。
てことでAPIを叩いてキャッシュを削除してみます。
curlでのヘルプはあるのですが、APIを叩くツールを作ろうとしたとき、PHPで組みたかったのでZend_Http_Client_Adapter_Curlを使ったソースを作りました。
ちなみにZendFrameworkは1系です。
やることの流れはこちらを参考にしました。
CloudFlare APIを使ってキャッシュを削除する
CloudFlareでAPIを使って個別にファイルキャッシュを削除させる
Zend_Http_Client_Adapter_Curlの使い方がけっこー謎で、ソースを追いながらやっと叩くことができました。
ドキュメントが完全に足りてないですね。。
-Hは$client->setHeaders()
--dataは $client->setRawData( json_encode(array())));
で設定するっぽいです。
zone idを取得
$url = 'https://api.cloudflare.com/client/v4/zones?name=[ドメイン名]&status=active&page=1&per_page=20&order=status&direction=desc&match=all';
$config = array(
'adapter' => 'Zend_Http_Client_Adapter_Curl',
'curloptions' => array(
CURLOPT_HEADER => false, // HTTPヘッダの内容は受け取らない
CURLOPT_RETURNTRANSFER => true, // 文字列形式で受け取る
)
);
$client = new Zend_Http_Client($url, $config);
$client->setHeaders(array(
'X-Auth-Email' => [メールアドレス],
'X-Auth-Key' => [APIキー],
'Content-Type' => 'application/json'
)
);
// レスポンスのオブジェクトを取得
$response = $client->request();
// HTTPステータスコードのチェック
$status_code = $response->getStatus();
if ($status_code != 200) {
echo $status_code;
}
// レスポンスボディー
print_r(json_decode($response->getBody()));
こんなレスポンスが返ってくるはず
stdClass Object
(
[result] => Array
(
[0] => stdClass Object
(
[id] => [これがZoneIDだよ]
[name] =>
[status] => active
[paused] =>
[type] => full
[development_mode] =>
[name_servers] => Array
(
[0] => isla.ns.cloudflare.com
[1] => sid.ns.cloudflare.com
)
[original_name_servers] => Array
(
[0] =>
[1] =>
)
[original_registrar] =>
[original_dnshost] =>
ここで返ってくるidがこのあと使うZoneIDです。
キャッシュの削除APIを叩く
$identifier = [ZoneID];
$url = 'https://api.cloudflare.com/client/v4/zones/'.$identifier.'/purge_cache';
$config = array(
'adapter' => 'Zend_Http_Client_Adapter_Curl',
'curloptions' => array(
CURLOPT_HEADER => false, // HTTPヘッダの内容は受け取らない
CURLOPT_RETURNTRANSFER => true, // 文字列形式で受け取る
)
);
$client = new Zend_Http_Client($url, $config);
$client->setHeaders(array(
'X-Auth-Email' => [メールアドレス],
'X-Auth-Key' => [APIキー],
'Content-Type' => 'application/json',
)
);
//全削除の場合
$client->setRawData( json_encode(array('purge_everything'=>true)));
//ファイル指定の場合
//$client->setRawData( json_encode(array('files'=>array('https://[ドメイン名]/[ファイル名]'))));
// レスポンスのオブジェクトを取得
$response = $client->request('DELETE');
// HTTPステータスコードのチェック
$status_code = $response->getStatus();
if ($status_code != 200) {
echo $status_code;
}
// レスポンスボディー
echo $response->getBody();
成功すればこんなレスポンスが返ってきます。
{"result":{"id":[ZoneID]},"success":true,"errors":[],"messages":[]}
公式ドキュメント
Cloudflare API | overview
Interact with Cloudflare's products and services via the Cloudflare API



コメント