2

この件に関する知識が不足していることを事前にお詫び申し上げます。私は他の多くの投稿を見てきましたが、それらの解決策のどれも私のために働くことができません。

とにかく、私は動的なdisplayimage.phpファイルを使用して、作業中のサイトでユーザーのプロフィール写真を表示しています。このページはidパラメータを取り、mysqlデータベースから画像ファイル名を取得します。(省略形の)コードは次のとおりです。

$id = mysql_real_escape_string($_GET[id]);

$table = "images_user";
$idname = "userid";
$uploaddir = "/home/username/uploads/images/user/"; //outside web root

$select = mysql_query("SELECT * FROM $table WHERE $idname = '$id' LIMIT 1");

if(mysql_num_rows($select) > 0) {
  $file = mysql_fetch_assoc($select);

  header("Content-Type: $file[mimetype]");
  readfile($uploaddir.$file[name]);
}

現在、phpファイルから生成されているため、画像はキャッシュされていません。これにより、サイトの速度が大幅に低下します。だから私はこれを追加します:

header("Cache-Control: private, max-age=10800, pre-check=10800");
header("Pragma: private");
header("Expires: " . date(DATE_RFC822,strtotime(" 2 day")));

これで問題は解決します。これで画像がキャッシュされ、非常に高速に読み込まれます。

ただし、ユーザーはプロフィール写真を変更することができます。これが発生した場合、アップロードした画像を保存し、古い画像を削除して、新しい画像を指すようにデータベースエントリを更新します。しかし今では、古い画像がまだキャッシュされているため、手動でページをF5しない限り、更新は表示されません。

画像をキャッシュするようにするにはどうすればよいですか?ただし、画像が変更されたときに「再キャッシュ」を強制しますか?

4

2 に答える 2

4

画像を更新したら、アクセスするURLにパラメータを追加して、画像を表示します。これは、`displayimage.php'です。最も一般的には、これはタイムスタンプになります。

通常の場合のように、あなたはアクセスしますdisplayimage.php?id=123123

プロフィール写真を更新した後、画像を更新するには、にアクセスする必要があります displayimage.php?id=123123&time=1000121110。時間パラメータを変更すると、ユーザーが画像を更新するたびに、ページから画像が強制的に再読み込みされます。

于 2012-07-09T17:41:04.683 に答える
1

現在、スクリプトへのURLは次のようになっています。

displayimage.php?id=X

あなたがする必要があるのは、ユーザーが自分のプロフィール写真を更新するたびに増分される各ユーザーのバージョン番号を追加することです。

displayimage.php?id=X&v=Y

バージョン番号はデータベースにも保存できます。

バージョン番号は、アップロードされた画像ファイルの最後に変更された時刻にすることもできます。これにより、別のテーブルフィールドを使用したり、コードをインクリメントしたりする必要がなくなります。

displayimage.php?id=X&v=TIME
于 2012-07-09T17:42:51.707 に答える