2

C++ コードを受け取り、それをサーバー上でコンパイルし、出力を吐き出す Web フォームがあります。問題の C++ コードは、Web ページで表示できる BMP ファイルに書き出されます。これは AJAX を介してインターフェースされます。私の主な問題は、プログラムを再コンパイルして画像を変更するたびに、ページを更新しない限り問題の画像が変更されないことです。したがって、キャッシングの問題だと思います。手順は次のとおりです。

  1. 人が C++ コードを入力する
  2. 人が送信を押します
  3. C++ コードは compile.php に送信されます
  4. compile.php はプログラムをコンパイルし、ディレクトリ内のすべての画像を表示します

プログラムで画像の色を変更してフォームを再送信すると、送信は成功しますが、ページを更新しない限り画像は変更されません。出力ファイル名を変更したときにこれを確認したところ、正しい色の新しい画像が作成されましたが、同じファイル名でプログラムを再コンパイルすると、ページを更新しない限り、その特定の画像は変更されません。

PHPファイルの先頭にno-cacheヘッダーを入れてみました。

<?php
header("Expires: Mon, 26 Jul 1990 05:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
?>
4

1 に答える 1

1

この問題を解決するには、AJAX リクエストを行うときに Javascript ライブラリでキャッシュを無効にしてみてください。JQueryの場合は、 に設定cachefalseます。

別の解決策は、リクエストを行うときに手動でキャッシュ無効化パラメーターを追加することです。たとえば、AJAX リクエストを に送信する代わりに、が現在のタイムスタンプである場所compile.phpにリクエストを送信します。これにより、ブラウザはキャッシュされたコピーを使用しないようになります。compile.php?123456123456

于 2012-07-07T10:17:00.490 に答える