dポイントプレゼントキャンペーン実施中!

perl+cgi で hpを作成しています。
ページのbgmを変更するcgiを作成し、新らしいbgmファイルに変更した後、変更するCGIから Location: http:./**.cgi ページに戻ると、キャッシュを読み込んで、bgmファイルは変わっているのに、古いbgmが再生されてしまいます。
キャッシュを読まないようにするには、どうしたら良いでしょうか。

A 回答 (5件)

HTMLデータはキャッシュされずに毎回読み直しが行われていても、


その中にある画像ファイルやBGMファイルはキャッシュが効いている事があります。

・方法1
Shift+再読込ボタンをクリック でどうでしょうか。

・方法2
IEの場合は、Windowsエクスプローラーでキャッシュフォルダを表示しておき、
(ツールメニューのインターネットオプションから、キャッシュフォルダを表示)
手作業でBGMファイルを削除する。
インターネットオプションダイアログからでも削除できますが、
いちいちダイアログを表示しないといけないのと、ダイアログを表示する間、IEの操作ができないので。

・方法3
BGMファイルをCGIを使って出力してみる。

<body bgsound="xxx.cgi">

xxx.cgi
#/usr/bin/perl
binmode STDOUT; # for windows server
print "Expires: -1\n";
print "Content-Type: audio/mp3\n\n";
open(FP, 'bgm.mp3');
print $_ while(<FP>);
close FP;


・方法4
サーバーがApacheなら.htaccessを設置。

ExpiresByType audio/mp3 "access plus 1 second"

などとすれば、.mp3ファイルのキャッシュ有効期限がアクセスから1秒になると思います。
"access plus 1 seconds"かもしれません。
http://httpd.apache.org/docs/2.0/ja/mod/mod_expi …

HTTPヘッダを直接指定する場合はheaderモジュールというのがあります。
これも拡張機能です。

<Files bgm.mp3>
Header set Expires "-1"
</Files>

http://httpd.apache.org/docs/2.0/ja/mod/mod_head …

mod_expires、mod_headersともにインストール時に追加インストールを指定しなければなりませんので、
一般のレンタルサーバーなどでは使えないと思いますが、ご参考まで。

方法3は公開用のHTMLと違ってしまうので(ファイル名が.cgiになるので)あまりおすすめしません。

この回答への補足

皆さんありがとうございました。
Intanet Explore の設定で解決しました。

Internet Explorer の設定
1.ツール → インターネットオプション → 全般(中段)
 ↓
2.中段右  設定
 ↓
3.保存しているページの新しいバージョン 

4.Web サイトを表示するたびに確認するを on

これで、一般のインタネット接続が遅くなるようなら、ページのメンテ時のみ、この設定にしようと思います。

ありがとうございました。

補足日時:2009/02/28 09:21
    • good
    • 0

ああ、BGM変更作業時の確認が目的でしたか。

すみません。

ブラウザの『更新』ボタンを押してもダメですか?

# IEなら、2回以上押さないとだめかも。

この回答への補足

ありがとうございます。
もちろんやってみました。何度押してもてもだめです。

補足日時:2009/02/28 05:22
    • good
    • 0

No.2 です。



bgmが鳴るページをリンクやURL入力で訪れた時と、ブラウザの『進む』、『戻る』の操作でbgmが鳴るページに戻った時は分けて考えてください。

後者でもキャッシュ禁止の設計は、お勧めできません。 参考URLはBGMの話題ではありませんが、書かれている理由・根拠はこの話題にも通用します。

参考URL:http://www.thinkit.co.jp/article/132/1/

この回答への補足

質問の仕方が悪かったようです。
キャシュンを全面的に禁止するということではなく、BGMを変える作業において、変更の確認を、ブラウザを終了させ、再接続して確認するのでなく、そのまま、ブラウザを終了せずに、確認したいということです。たとえば30個のBGMを変えるとなると、ブラウザを手作業で終了、再起動すのは、大変面倒な作業になります。途中に中継するファイルを経由してもいいから、手作業で再起動せずに変更前の画面に自動的に戻って確認できるようにしたいのです。

補足日時:2009/02/27 18:23
    • good
    • 0

Cache-Control: no-cache


Expires: Thu, 01 Dec 1994 16:00:00 GMT

を、レスポンスヘッダに含めるのが良いと思います。
HTMLの場合には、さらに同じ内容を意味する META タグを含めるとより確実かも。

この回答への補足

ありがとうございます。
ネットなどの情報も参考に、<head> ~ </head> 間に
<meta http-equiv=\"Pragma\" content=\"no-cache\">
<meta http-equiv=\"Cache-Control\" content=\"no-cache\">
<meta http-equiv=\"Expires\" content=\"Thu, 01 Dec 1994 16:00:00 GMT\">
としてみましたが、効果がありません。

補足日時:2009/02/28 05:25
    • good
    • 0

$time = time;


Location: http:./**.cgi?$time;

このようにtimeをつけてやって強制的に別ファイルにすればたぶんいけるのではないでしょうか。

この回答への補足

お世話になります。
やってみたのですが、うまく行きません。

補足日時:2009/02/27 18:30
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!