アマゾンの商品を紹介するツールとして便利なものに「lilbox」があります。それには商品の画像をキャッシュする機能があります。
ページを表示するたびにアマゾンに商品画像をリクエストしていたら表示に時間がかかってしまいます。そこで一度読み込んだ画像を自分のサーバーにキャッシュしておくことで同じ商品を表示するときはアマゾンからではなく自分のサーバーから画像をすばやく呼び出すことができるというわけです。
画像のキャッシュというのはどうやってするのかこれまでわからなかったのですが、「lilbox」のコードを見てみるとテキスト同様に画像をキャッシュできるというのがわかったので記録しておきます。
キャッシュといっても拡張子「 .jpg 」の画像ファイルを作成しているだけなんですね。それも画像のデータもテキスト同様に fopen( ) やfwrite( ) などで扱えるようです。
「lilbox.txt」内の該当部分をわかりやすく書いてみました。
//テストとしてアマゾンの画像をセット
$imgSRC="http://ec1.images-amazon.com/images/P/4839914397.01._oCMZZZZZZZ_.jpg";
//画像ファイル読み込み保存
$imgData = "";
$remoteImage = @fopen( $imgSRC, "rb" );
if ( $remoteImage ) {
while( !feof($remoteImage) ) {
$imgData .= fread( $remoteImage, 1024 );
}
}
$localImage = fopen( $localUrl, "wb" );
fwrite( $localImage, $imgData );
?>
まず、fopen( ) で保存したい画像を開きます。開いた $remoteImage をfread( ) で一行ずつ読み込んでいきます。この作業を $feof( ) でデータの最後まで繰り返します。
次に$localUrl(ローカルでの保存ファイル名)を書き出しモードで開きます。そこに先ほどの$imgData を書き出す(書き込む)だけのようです。
これでローカルに画像ファイルが作られます。意外と簡単!




