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 Documentation
Interact with Cloudflare's products and services via the Cloudflare API
コメント