画像のサムネイルも含むアイテムのリストがあります。サムネイル画像を変更する必要がある場合もありますが、ファイル名はそのままにしておきます。ブラウザのキャッシュから取得する代わりに、ブラウザに新しくアップロードされた画像を強制的にダウンロードさせる方法はありますか?
これは、人々がアバターを更新する場合に非常に関係があり、ブラウザのキャッシュをクリアするか、ブラウザを再起動するまで、古いアバターを見続ける一部のユーザーに混乱を引き起こします。
画像のサムネイルも含むアイテムのリストがあります。サムネイル画像を変更する必要がある場合もありますが、ファイル名はそのままにしておきます。ブラウザのキャッシュから取得する代わりに、ブラウザに新しくアップロードされた画像を強制的にダウンロードさせる方法はありますか?
これは、人々がアバターを更新する場合に非常に関係があり、ブラウザのキャッシュをクリアするか、ブラウザを再起動するまで、古いアバターを見続ける一部のユーザーに混乱を引き起こします。
画像の末尾に一意の番号を追加するsrc
すなわち
<?php
echo "<img src=../thumbnail.jpg?" . time() . ">";
これは、アバターを更新するためのフォームでのみ実行してください
私のために働く
ところで、これは他の静的ファイルの更新を強制するためにうまく機能します
つまり、cssファイルのhtmlは
<link rel="Stylesheet" href="../css/cssfile.css?<?= md5_file('cssfile.css'); ?>" />
ファイルの変更時刻を使用できます。
<?
$filename = 'avatar.jpg';
$filemtime = filemtime($filename);
echo "<img src='".$filename."?".$filemtime."'>";
//result: <img src='avatar.jpg?1269538749'>
?>
ファイルが変更されると、クライアントのキャッシュがクリアされます
キャッシュされた画像は、手動でページを更新する (ブラウザーで F5 キーを押す) ときにも無効になります。これは、本体のロード時に Javascript メソッド location.reload() を起動することでシミュレートできます。永続的なリロードを避けるために、これは一度だけ行うことができます。ユーザーが新しいアバターをアップロードすると、ReloadPending リクエストがセッションで永続的に設定され、応答されるとリセットされます。
<?php
if ($session['ReloadPending'])
{ $session['ReloadPending']=false;
echo "<body onload='location.reload(true);'>";
} else echo "<body>";
?>
アバターのアップロード後にページ全体をリロードすると、ページがちらつきますが、これは 1 回しか発生しないため、許容できると思います。
ヘッダーを変更することで、ページ全体のキャッシュを無効にすることができます:
<?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
?>
Expires
画像を送信するときは、ヘッダーを送信しないようにしてください。次のキャッシュ ヘッダーの送信も検討してください。
Cache-Control: must-revalidate
これにより、ブラウザは毎回サーバーに画像を要求します。リクエストの If-Modified-Since ヘッダーを監視します。画像が変更されていない場合は、304 HTTP コードで応答します。
この手順全体 (must-revalidate、If-Modified-Since、304 回答) により、ブラウザは画像コンテンツをキャッシュできますが、同時にファイルが変更されたかどうかをサーバーに問い合わせることができます。
もう 1 つの簡単な解決策は、Expires
ヘッダーを将来の短い時間 (たとえば 10 分) だけに設定し、ユーザーに 10 分の遅延を通知することです。これにより、画像に対して HTTP リクエストを行う必要がまったくないため、ほとんどのページの読み込みが高速化されます。
画像に最終更新日を追加するか、単に画像の最後に日付と時刻を追加できます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 の後に、このように日付と時刻を追加します。これがあなたを助けることを願っています。