2010-11-23 10 views
2

は、私はそれが動作PHPキャッシングの問題

<?php 
class Vp_CacheImage 
{ 
    public function cache($cacheTime, $place) // $place = id of image (between 1 and 100) 
    { 
     $send_body = true; 
     $etag = '"' . md5(date('d.m.Y', time()) . $place) . '"'; 
     header("ETag: " . $etag); 
     header("Last-modified: " . gmdate("D, d M Y H:i:s", $cacheTime) . " GMT"); 

     $inm = explode(',', getenv("HTTP_IF_NONE_MATCH")); 
     foreach ($inm as $i) 
     { 
      if (trim($i) == $etag || trim($i) == $cacheTime) 
      { 
       header ("HTTP/1.0 304 Not Modified"); 
       $send_body = false; 
      } 
     } 

     if(getenv("HTTP_IF_MODIFIED_SINCE") == gmdate("D, d M Y H:i:s", $cacheTime). " GMT") 
     { 
      header ("HTTP/1.0 304 Not Modified"); 
      $send_body = false; 
     } 

     header("Expires: " . gmdate("D, d M Y H:i:s", time() + Config::$config['cache']['images']['topvideo']) . " GMT"); 
     header("Cache-Control: max-age=" . Config::$config['cache']['images']['topvideo'] . ", must-revalidate"); 
     if ($send_body) return true; else return false; 
    } 
} 

一部の画像をキャッシュするためのクラスを持っています。しかし、時々リロードされた画像をキャッシュから取り出さなくてはなりません。どうやってするの?

答えて

2

次に、キャッシュから最初に削除するか、またはtempを追加する必要があります。ランダムなトークン(例えば、?x=234)を置き換えて再読み込みします。

リロードする直前に期限を設定することもできますが、それは難しいことです。

+0

'リロードする直前に期限を設定することもできますが、それは難しいですが、いつリロードする必要があるのか​​分からないうちに可能ではないかもしれません。 –

0

イメージURLに単純にバージョンを追加できますか?例:myimage.jpg?v = 10

これを行うと、ブラウザはキャッシュされた画像を使用するのではなく、画像の新しいコピーを要求します。

0

イメージを再度フェッチするようにブラウザを強制する最も簡単な方法は、ファイル名の最後にクエリ文字列を追加することです。

<img src="/assets/images/abc.png?v2">