PHPでCache_Liteでキャッシュを保存していた時にキャッシュ自体は保存できているのに、Cache_Lite->get
してもfalse
になりキャッシュが上手く機能しなくてハマッたメモ。
Twitterからタイムラインを取得して返すAPIを作っていました。
<?php require_once(__DIR__ . '/lib/config.php'); // Twitter APIのキーとかが入ってるファイル require_once(__DIR__ . '/lib/twitteroauth/autoload.php'); require_once(__DIR__ . '/lib/cache/Lite.php'); use Abraham\TwitterOAuth\TwitterOAuth; $cache_id = 'id_tw'; $cache_group = 'twitter'; $options = array( 'cacheDir' => __DIR__ . '/app/tmp/', 'lifeTime' => 180, ); $cache = new Cache_Lite($options); if( $data = $cache->get($cache_id, $cache_group) ) { // キャッシュがアレばそれを使う } else { $data = array(); $twObj = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, ACCESS_TOKEN, ACCESS_TOKEN_SECRET); $res = $twObj->get("statuses/user_timeline", array( 'screen_name' => TWITTER_USER, 'count' => "10" )); if($res) { foreach($res as $key => $post) { $d = array(); // $postデータから必要なものを取り出して整形 $d['id'] = $post->id; $d['text'] = $post->text; // ... $data[] = $d; } $cache->save($data, $cache_id, $cache_group); } } header("Content-Type: application/json; charset=utf-8"); echo json_encode($data); exit(); ?>
Twitterからデータは取得でき、キャッシュファイルも作られてるのにif( $data = $cache->get($cache_id, $cache_group) )
が常にfalse
でキャッシュから読み込まれていない状態になっていました。そこでキャッシュファイルの中身を確認したら........... 0
みたいな感じでどうやら保存そのものに問題があったようです。
saveするデータが配列のままだったのが問題
キャッシュを保存している
$cache->save($data, $cache_id, $cache_group);
の部分の$data
が配列のままだったのがよろしくないようでした。
キャッシュを保存している部分を修正します。
<?php // {略} // json形式に変換してキャッシュに保存 $data = json_encode($data); $cache->save($data, $cache_id, $cache_group); } } header("Content-Type: application/json; charset=utf-8"); // 既にjson形式に変換されているのでこっちではエンコードしない echo $data; exit(); ?>
これで上手くキャッシュから読み込まれるようになりました!
今どきCache_Lite
感があるのでPHPに導入された方のキャッシュを勉強しなければと思いつつ...
[Twitter取得関係のメモ]
- GET statuses/user_timeline | Twitter Developers
- TwitterOAuth PHP Library for the Twitter REST API
- PHPからTwitterツイート(2015年2月版) - Qiita
- marchive » Twitter APIを使ってツイートを表示させる
- PHPでOAuth認証して自分のつぶやきを表示する [Twitter API 1.1 対応版] | webOpixel

やはり俺の青春ラブコメはまちがっている。10.5 (ガガガ文庫)
- 作者: 渡航
- 出版社/メーカー: 小学館
- 発売日: 2015/03/27
- メディア: Kindle版
- この商品を含むブログ (4件) を見る