23

画像のサムネイルも含むアイテムのリストがあります。サムネイル画像を変更する必要がある場合もありますが、ファイル名はそのままにしておきます。ブラウザのキャッシュから取得する代わりに、ブラウザに新しくアップロードされた画像を強制的にダウンロードさせる方法はありますか?

これは、人々がアバターを更新する場合に非常に関係があり、ブラウザのキャッシュをクリアするか、ブラウザを再起動するまで、古いアバターを見続ける一部のユーザーに混乱を引き起こします。

4

8 に答える 8

33

画像の末尾に一意の番号を追加するsrc

すなわち

<?php

echo "<img src=../thumbnail.jpg?" . time() . ">";

これは、アバターを更新するためのフォームでのみ実行してください

私のために働く

ところで、これは他の静的ファイルの更新を強制するためにうまく機能します

つまり、cssファイルのhtmlは

<link rel="Stylesheet" href="../css/cssfile.css?<?= md5_file('cssfile.css'); ?>" /> 
于 2010-12-18T22:07:23.210 に答える
8

ファイルの変更時刻を使用できます。

<?

$filename = 'avatar.jpg';
$filemtime = filemtime($filename);

echo "<img src='".$filename."?".$filemtime."'>";

//result: <img src='avatar.jpg?1269538749'>

?>

ファイルが変更されると、クライアントのキャッシュがクリアされます

于 2010-06-29T05:07:20.097 に答える
2

キャッシュされた画像は、手動でページを更新する (ブラウザーで F5 キーを押す) ときにも無効になります。これは、本体のロード時に Javascript メソッド location.reload() を起動することでシミュレートできます。永続的なリロードを避けるために、これは一度だけ行うことができます。ユーザーが新しいアバターをアップロードすると、ReloadPending リクエストがセッションで永続的に設定され、応答されるとリセットされます。

<?php
if ($session['ReloadPending']) 
{   $session['ReloadPending']=false; 
       echo "<body onload='location.reload(true);'>"; 
} else echo "<body>";
?>

アバターのアップロード後にページ全体をリロードすると、ページがちらつきますが、これは 1 回しか発生しないため、許容できると思います。

于 2014-01-30T22:28:14.933 に答える
2

ヘッダーを変更することで、ページ全体のキャッシュを無効にすることができます:

<?php
header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Date in the past
?>
于 2010-06-29T04:52:09.180 に答える
1

Expires画像を送信するときは、ヘッダーを送信しないようにしてください。次のキャッシュ ヘッダーの送信も検討してください。

Cache-Control: must-revalidate

これにより、ブラウザは毎回サーバーに画像を要求します。リクエストの If-Modified-Since ヘッダーを監視します。画像が変更されていない場合は、304 HTTP コードで応答します。

この手順全体 (must-revalidate、If-Modified-Since、304 回答) により、ブラウザは画像コンテンツをキャッシュできますが、同時にファイルが変更されたかどうかをサーバーに問い合わせることができます。


もう 1 つの簡単な解決策は、Expiresヘッダーを将来の短い時間 (たとえば 10 分) だけに設定し、ユーザーに 10 分の遅延を通知することです。これにより、画像に対して HTTP リクエストを行う必要がまったくないため、ほとんどのページの読み込みが高速化されます。

于 2010-06-29T04:55:11.717 に答える
0

画像に最終更新日を追加するか、単に画像の最後に日付と時刻を追加できますURL

例えば

$today=date('Y-m-d H:i');

<img class="img-circle pro_pic" src="https://govcard.net/yourimage.jpg?lm=<?php echo $today?>" alt=""> 

.jpg の後に、このように日付と時刻を追加します。これがあなたを助けることを願っています。

于 2020-05-10T17:31:56.837 に答える