実行すると、$queryword = "ハウステンボス";から「ハウステンボス」の画像が表示され、キャッシュを保存するディレクトリ(tmp)にファイルが保存されます。
しかし、$queryword を「東京ディズニーランド」に変更して実行しても、保存した「ハウステンボス」関係のファイルが$data = $Cache_Lite->get($id); if ($data !== false) { で該当してしまい、「東京ディズニーランド」の画像を表示するハズが、そのまま「ハウステンボス」の画像になってしまいます。これを回避するために$querywordを含むurlを$idとしているのですが、有効でないようです。
皆様のお知恵を拝借したく思っています。
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<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/imageSea...";
//検索語をリクエストに追加
$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>
あのー、Cache_Lite::get を呼ぶ前に、$req 変数の内容が設定されてないのが、原因じゃないかと思うんですけど。
だから、$id も常に同じ値。
コンストラクタ get の第2引数にキャッシュグループ名を指定してみて下さい。
http://pear.php.net/manual/ja/package.caching.cache-lite.cache-lite.get.php
あのー、Cache_Lite::get を呼ぶ前に、$req 変数の内容が設定されてないのが、原因じゃないかと思うんですけど。
だから、$id も常に同じ値。
コメント(0件)