web-dev-qa-db-ja.com

ビューでの画像のキャッシュを停止し、画像が外部で更新されたときにjquery画像のスライドショーを強制的に再読み込みします

D7には、jquery画像のスライドショーを含むビューを含むパネルがあります。

スライドショーを構成する画像は毎日、cronジョブによって更新されます。つまり、毎日の新しい画像は古い画像を上書きします(同じ名前が付けられています)。たとえば、image1.png、image2.png、image3.pngがあるとすると、これらのファイルは毎日新しい画像で上書きされます。

ページ/パネルとビュー自体の両方に、メタセクションで次のアンチキャッシュ保護を追加しました。

<meta http-equiv="Cache-Control" content="no-cache, must-revalidate"> 
<meta http-equiv="Pragma" content="no-cache"> 
<meta http-equiv="Expires" content="0"> 
<meta http-equiv="refresh" content="300"> 

また、任意の期間のサーバーとjavascript/cssのすべてのキャッシュをオフにしました。また、イメージの上書きが発生した後、cronキーを使用して外部cronを実行します。

それでも、画像ファイルの新しいコンテンツを反映するために私のスライドショーを更新する唯一の方法は、F5またはctrl + rのハードリロードを行うときだけのようです。

これをユーザーに依頼したくないので、サーバーでスライドショーの画像が変更されたことをブラウザーに認識させるために、上記の方法を超えてリロードとキャッシュクリアを強制するにはどうすればよいですか? ?

(私はこの最近の同様の投稿 画像が更新されたかどうかを確認する方法 を見ましたが、それは外部で作成されてポンプインされたものではなく、Drupalによって作成された画像に適用されるようです。)

更新:

また、以下の@ mikeytown2のコメントに照らして、.htaccessファイルに以下を追加しました。

 # Requires mod_expires to be enabled.
<IfModule mod_expires.c>
  # Enable expirations.
  ExpiresActive On

  # Cache all files for 2 weeks after access (A).
  # ExpiresDefault A1209600
  ExpiresDefault A600 #NOTE, this means ALL sites expire in 5 minutes by default!

  <FilesMatch \.php$>
    ExpiresActive Off
  </FilesMatch>

</IfModule>

.htaccessは私のパブリックフォルダにあります。

これでも、Drupalページのすべてのキャッシュが5分で期限切れになることを通知しているはずですが、スライドショーで同じ名前の古い画像が新しい画像に置き換わっても、更新が表示されません。

私は自分のキャッシュを完全にクリアし、外部のcronを待つことを確認しました。古い画像はブラウザーやサーバーにキャッシュされたままです。

3
Mittenchops

これらの内部から破壊的な設定はどれも機能しませんでした。実際にキャッシュをリセットするには、リモートでcron.phpをカールする必要があることがわかりました。

0
Mittenchops

firebugs net panel image1.pngをクリックし、キャッシュを選択してこの情報を取得します

Last Modified
Last Fetched
Expires

現在HTMLページをブラウザーにキャッシュしないように設定している(これは、デフォルトで既に設定されています)。画像がサーバーでホストされている場合は、Apache .htaccessルールを調整し、これらの画像をキャッシュしないようにする必要があります。 Drupalの デフォルトのhtaccessは2週間のキャッシュを使用します phpスクリプト以外のすべての場合。 filesmatch を使用して、画像の例外を作成する必要があります。例:

# Requires mod_expires to be enabled.
<IfModule mod_expires.c>
  # Match image1.png, image2.png, etc...
  <FilesMatch ^image\d+\.png$>
    # Disable browser caching.
    ExpiresActive Off
  </FilesMatch>
</IfModule>

画像がサーバーでホストされていない場合は、疑問符に 現在のUNIX時間 を画像のsrcの最後に追加するだけです。例:

image1.png?1317717247
3
mikeytown2