主にWEB関係の話。

スポンサード リンク

画像を動的に処理する場合にサーバ上にキャッシュを作成する方法

画像を大量に扱うサイトで、画像のサムネイルを動的に生成したり、動的にロゴを挿入したり、といった事がある。
そういう場合に、毎回、サイズ変更・画像合成とかやってると流石に重いので…
適用する処理毎にキャッシュを生成し、キャッシュが存在する場合はキャッシュから読み込んで出力、存在しない場合はリサイズ等の処理の後、キャッシュを保存後出力する方法。

<?php
/*
 * $_GET['workId']→処理ID
 * $_GET['name']→ファイル名
 */
define('IMG_DIR','/www/imgdir/');
define('CACHE_DIR',IMG_DIR.'cache/');
$imgFile = IMG_DIR.basename($_GET['name']);
$cacheFile = CACHE_DIR.intval($_GET['workId']).'/'.basename($_GET['name']);
if(file_exists($imgFile)) {
    if (file_exists($cacheFile) && filemtime($cacheFile) > filemtime($imgFile) ) {
        $outImg = imagecreatefromjpeg($cacheFile);
    }
    else{
        /*
         * ここで、処理IDに毎の処理(リサイズ・合成など)を行う
         * #省略#
         */
        //処理IDと同一名のディレクトリが存在しない場合はディレクトリ作成
        if (!is_dir(dirname($cacheFile))) {
            mkdir(dirname($cacheFile), 0755);
        }
        //キャッシュ保存
        imagejpeg($outImg, $cacheFile);
    }
    //出力
    header("Content-Type: image/jpeg");
    ImageJpeg($outImg);
}
else{
    echo '画像ファイル無し';
}
?>

cronなどで定期的にキャッシュディレクトリの掃除をすると良いかもしれない。

ImageJpeg部分とheader指定をそれぞれgifとかpngに変えてあげるとJpg意外でも使える。

スポンサード リンク

人気記事

最近の投稿

カテゴリー

タグ