1

タイトルにあるように、php スクリプトによって生成されたリソースをユーザーのブラウザーにキャッシュしたいと考えています。サーバー側からいくつかの画像のサムネイル画像を動的に提供したいので、そうしたいです。これらの内容を含むこの.htaccessファイルがあります。

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^(.+)$ index.php?image_id=$1 [QSA,L]

そして index.php ファイルにはこれらのコードが含まれています。

<?php

      header('Last-Modified: ' .gmdate('D, d M Y H:i:s',time()-3600) . ' GMT');


$image_id=$_GET['image_id'];
$chunk=  explode("/", $image_id);
$destination_height=$chunk[0];
$destination_width=$chunk[1];
$image=$chunk[2];
if(file_exists($image))
{
$extension=explode(".",$image);
$extension=end($extension);
switch ($extension) {
    case "jpg":
        $source_image=  imagecreatefromjpeg($image);
        break;
case "jpeg":
        $source_image=  imagecreatefromjpeg($image);
        break;
    case "gif":
        $source_image=  imagecreatefromgif($image);
        break;
    case "png":
        $source_image=  imagecreatefrompng($image);
        break;    
    default:
        break;
}
        $source_height = imagesy($source_image);
        $source_width = imagesx($source_image);
        if($destination_height=="full")
        {
            $destination_height=$source_height;
        }
        if($destination_width=="full")
        {
            $destination_width=$source_width;
        }
        $destination_image=  imagecreatetruecolor($destination_width, $destination_height);
  $dst_x=0;
     $dst_y=0;
     $src_x=0;
  $src_y=0;
  imagecopyresized($destination_image,$source_image,$dst_x,$dst_y,$src_x,$src_y,$destination_width,$destination_height,$source_width,$source_height);
switch ($extension) {
    case "jpg":
   imagejpeg($destination_image);
   header("content-type:image/jpeg");
        break;
  case "jpeg":
   header("content-type:image/jpeg");
   imagejpeg($destination_image);
        break;
    case "gif":
   header("content-type:image/gif");
   imagegif($destination_image);
        break;
    case "png":
   header("content-type:image/png");
   imagepng($destination_image);
        break;
    default:
    break;
}
}
?>

この後も、開発者モードに移動して Google Chrome のネットワーク タブを表示すると、ステータス情報は : 200 OK
このスクリプトによって生成されたすべての画像をキャッシュするにはどうすればよいですか? 特定の URL については、この実装ではコンテンツが変更されないため、画像をキャッシュしたいと考えています。どんなアイデアでも歓迎します。ありがとう。

4

1 に答える 1

0

これを使って

file_put_contents($filename, $imagedata);

イメージをサーバーに書き込みます。htaccess ファイルは、ファイルが存在しない場合にのみイメージ生成を実行するため、ファイルを 1 回だけ書き込み、それ以降はキャッシュされたバージョンを提供します。

于 2013-03-28T18:02:44.537 に答える