人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

PEARのCache_Liteでapiからの画像をキャッシュするプログラムを作っていますが壁にぶち当たっています。ソースは下に記載させていただきます。

実行すると、$queryword = "ハウステンボス";から「ハウステンボス」の画像が表示され、キャッシュを保存するディレクトリ(tmp)にファイルが保存されます。
しかし、$queryword を「東京ディズニーランド」に変更して実行しても、保存した「ハウステンボス」関係のファイルが$data = $Cache_Lite->get($id); if ($data !== false) { で該当してしまい、「東京ディズニーランド」の画像を表示するハズが、そのまま「ハウステンボス」の画像になってしまいます。これを回避するために$querywordを含むurlを$idとしているのですが、有効でないようです。

皆様のお知恵を拝借したく思っています。


●質問者: ozaki
●カテゴリ:インターネット ウェブ制作
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

質問者から

<html>
<head>


<title>キャッシュを導入</title>
</head>
<body>

// Cache_Liteのプログラムを読み込む
require_once 'Cache/Lite.php';
$dir = "/home/users/1/lolipop.jp-withmama/web/kaihatsu/ad/list_added_clients/add_inc/tmp";

if (!file_exists($dir)) {
mkdir($dir, 0777);
echo "キャッシュ用のディレクトリを作成しました";
}

//キャッシュオプション設定
$cacheOptions = array(
'cacheDir' => './tmp/', //tmpディレクトリに設定
'lifeTime' => '9600', //秒単位
'caching' => 'true',
'automaticCleaningFactor' => '20',
//新規キャッシュファイル保存時の期限切れファイル自動削除設定。例の場合1/20の確率で削除される
'pearErrorMode' => CACHE_LITE_ERROR_DIE,
// 'automaticSerialization' => 'true', // 配列を保存可能に
);

//キャッシュID設定

$id = md5( $req );

//Cache_Liteオブジェクト生成
$Cache_Lite = new Cache_Lite($cacheOptions);

//キャッシュがあるかどうかテスト
$data = $Cache_Lite->get($id);
if ($data !== false) {

//有効なキャッシュがある場合の処理
// キャッシュデータを表示
echo "キャッシュがある";
echo $data;
}else{

//有効なキャッシュがない場合の処理
echo "キャッシュがない";

//データを生成する
function imageSearch($queryword,$results){
//XMLデータ取得用ベースURL
$req = "http://search.yahooapis.jp/PremiumImageSearchService/V1/imageSearch?appid=69Wnorixg679TvBbn9ipOXIKgZIeEZADr5x6E3UbKi_bMwdmOnlxpcZLFbeqqEypuw--";

//検索語をリクエストに追加
$req .= "&query=". urlencode($queryword);
//検索の詳細指定
//all :全クエリー文字を含む検索結果 any :クエリー文字のうちいずれかを含む検索結果
$req .= "&type=".all;
//検索結果の表示件数
$req .= "&results=".$results;

$id = md5( $req );

//XMLファイルをパースし、オブジェクトを取得
$xml = simplexml_load_file($req)
or die("XMLパースエラー");

$ret = '
';
foreach ($xml->Result as $item_img){
$ret .= "Thumbnail->Url."\">";
}

$ret .= "
";
return $ret;
}//ここまでがfunction imageSearch

//リクエストパラメータ設定
$queryword = "ハウステンボス";
$results = 3;

//関数をコールする
$data .= imageSearch($queryword,$results);

//生成したデータを表示
echo $data;

//データをキャッシュ保存
$Cache_Lite->save($data,$id);

} //ここまでが有効なキャッシュがない場合の処理

?>
</body>
</html>
1 ● oil999
●0ポイント

コンストラクタ get の第2引数にキャッシュグループ名を指定してみて下さい。

Cache_Lite::get(公式マニュアル)

http://pear.php.net/manual/ja/package.caching.cache-lite.cache-lite.get.php

【参考】PEAR::Cache_Liteで簡単キャッシュ

http://itpro.nikkeibp.co.jp/article/COLUMN/20070507/270072/


2 ● a-kuma3
●100ポイント ベストアンサー

あのー、Cache_Lite::get を呼ぶ前に、$req 変数の内容が設定されてないのが、原因じゃないかと思うんですけど。
だから、$id も常に同じ値。

関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ