CGI(Perl)を実行するとファイルを読みに行き、毎回違った内容をブラウザに表示する。・・・というものを作ったのですがブラウザがキャッシュを先に見にいってしまい、(おそらく)CGIが実行しません。どうにかしてキャッシュを見に行かないようにしたいのですが。
助けてください。お願いします。

このQ&Aに関連する最新のQ&A

A 回答 (3件)

== Start Program ==


Content-type: text/html

<HTML><HEAD>
<META HTTP-EQUIV="名前" CONTENT="データ">
</HEAD>
<BODY ...>
HTMLタグ等・・・
</BODY></HTML>
== END Program ==

上記プログラムは、以下のように書き換えることも出来ます。

== Start Program ==
名前: データ
Content-type: text/html

<HTML><HEAD>
</HEAD>
<BODY ...>
HTMLタグ等・・・
</BODY></HTML>
== END Program ==

但し、<META>タグのHTTP-EQUIV属性のみです。
また、この属性に対応しているブラウザのみで反応します。
他の方の回答についても、同様です。

参考URL:http://wakusei.cplaza.ne.jp/twn/html/meta.htm
    • good
    • 0

私の場合、HTMLのヘッダに以下のタグを入れています。



<META HTTP-EQUIV="Pragma" CONTENT="no-cache">
<META HTTP-EQUIV="Cache-Control" CONTENT="no-cache">
<META HTTP-EQUIV="Expires" CONTENT="Mon, 1 Jan 1990 00:00:00 GMT">

参考まで
    • good
    • 0

 表示されるHTMLにこのタグを入れます。



<META HTTP-EQUIV=”Pragma” CONTENT=”no-cache”>

 大文字は小文字に変換してください。
    • good
    • 0

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

このQ&Aと関連する良く見られている質問

QApachでCGI(Perlスクリプト使用)を動かすときに先頭の#!に関係なく実行できるようにするには。

ApachでCGI(Perlスクリプト使用)を動かすときに先頭の#!のPerlを動かす場所(?)を指定する行が無かった場合や、違う場合でも、Apachが勝手にperlの場所を解釈しスクリプトを実行してくれるようになるhttpd.confの設定方法ってありますか?

Aベストアンサー

> CGI(Perl使用)の部分もあるので、ローカルで実際に動かしてからサーバにアップしています。
> ローカルでの実行環境がApach(for win32)+ActivePerlで、サーバにアップするときにわざわざ#!部分を変更しなければなりません。それが少々めんどくさいので
> 質問したわけであります。

発想の転換をしてみてください。
要するに「she-bang 書き換えが面倒くさい」だけなんですよね?

Apache に依存させるのではなく、ActivePerl を入れなおして、ディレクトリをあわせてみてはいかがでしょうか。
ActivePerl をインストールする際に、例えばサーバ側が
/usr/bin/perl
だった場合、
c:\usr
フォルダを作っておいて、インストール先を c:\usr にしておけば、perl インタプリタの実行ファイルが c:\usr\bin\perl.exe になります。
she-bang を #!c:\usr\bin\perl とすればいいのは勿論なんですが、Apache を介せば、UNIX 表記でも問題ないので、#!/usr/bin/perl と記述することが可能です。当然それなら、いちいち書き換えなくても、サーバ側でそのまま利用することが可能です。

コツとしては、perl のパスの bin ディレクトリの上位まで、Windows 上に作っておいて、インストール先として、そこまで指定します。

/usr/local/bin/perl としたい場合は、c:\usr\local フォルダを作っておいて、インストール先として c:\usr\local を指定すれば、自然と bin ディレクトリが作られ、その中に perl.exe がインストールされます。
で、CGI として使用したいファイルの先頭を
#!/usr/local/bin/perl とすれば、サーバでも Win 環境でも共用できる she-bang が書けますので、そういうことを気にしなくてもいいと思います。
私はかれこれ 3 年間、この方法を使ってます。

> CGI(Perl使用)の部分もあるので、ローカルで実際に動かしてからサーバにアップしています。
> ローカルでの実行環境がApach(for win32)+ActivePerlで、サーバにアップするときにわざわざ#!部分を変更しなければなりません。それが少々めんどくさいので
> 質問したわけであります。

発想の転換をしてみてください。
要するに「she-bang 書き換えが面倒くさい」だけなんですよね?

Apache に依存させるのではなく、ActivePerl を入れなおして、ディレクトリをあわせてみてはいかがでしょうか。
A...続きを読む

Q実行形式のCGI はPerl が不要?

超が付く初心者なのでお手柔らかにお願いします。

質問はタイトルの通りで、現在ActivePerlをつかったCGIを設置しているのですが、これを全て *.exe で代替した場合はActivePerlが不要になるのでしょうか?

ちなみに *.exe はデルファイで組んだものです。

Aベストアンサー

他で使われてなければ、必要ありません。

QSSI で #exec 以外で Perl-CGI を実行する方法は?

最近 CGI に興味をもち Perl を始めました。
簡単なサンプルを無料サーバーにアップロードして cgi だけを
直接実行すると問題なく実行されます。

ですが SSI の #exec を使って HTML ソースに
<!--#exec cgi="/cgi-bin/sample.cgi" -->
と記述してページを開くと
[an error occurred while processing this directive]
と表示されてエラーになりました。

無料サーバーは infoseek で CGI/SSI は使えると書かれていたので
試してみました。それでもう一度確認の為に読んで見ると『#exec』は
セキュリティ強化のため利用できないことが判明しました。
http://help.www.infoseek.co.jp/isweb/20602.html#7

質問内容:
(1)CGI/SSI は使えるが #exec は使えない状況でどうやって Perl-CGI を
  HTML ソースに記述して実行すればよいのか?
(2)CGI は cgi-bin に置きパーミッションを 755 に設定しています。
  設定は infoseek さんの指示通りです。他に設定すべき点ありますか?
(3)Perl-CGI の1行目ではちゃんと『#!/usr/local/bin/perl』と記述しています。
  こちらも infoseek さんの指示通りです。
  Perl の記述で何か気をつけるべき点はありますか?バグ以外で。
(4)HTML ソースの拡張子は shtml にしています。
  SSI を使うにはサーバーが対応していれば拡張子を変えるだけで使えるのですか?

今回の質問は Perl-CGI を HTML ソースに記述して実行する?には
どうすべきかをお聞きしたいです。infoseek さんの情報は次のリンクです。
http://help.www.infoseek.co.jp/isweb/20601.html
またネット検索していたら次のページを発見しました。
http://cocohome.hp.infoseek.co.jp/ssi/
ここの人は私と同じ infoseek で SSI 入門を書いています。
なぜこの方は SSI の #exec が使えるのでしょうか?
この辺も知りたいです。
分かる方お願いします。
教えて下さい。

最近 CGI に興味をもち Perl を始めました。
簡単なサンプルを無料サーバーにアップロードして cgi だけを
直接実行すると問題なく実行されます。

ですが SSI の #exec を使って HTML ソースに
<!--#exec cgi="/cgi-bin/sample.cgi" -->
と記述してページを開くと
[an error occurred while processing this directive]
と表示されてエラーになりました。

無料サーバーは infoseek で CGI/SSI は使えると書かれていたので
試してみました。それでもう一度確認の為に読んで見ると『#exec』は
セキュ...続きを読む

Aベストアンサー

infoseekのフリーサーバーを利用している者です。
SSI #execが不可になったときに、#include を試してみましたが、その時はプログラムソースがそのままincludeされてましたが、それではあんまりだと、今はエラー表示になったようですね。
No.5でご呈示のHTTP_REFERER編集まではやってませんが、たぶん無理かと思います。
SSIでユーザープログラムを実行させることそのものを排除しているように思います。

あと、#includeに限らず#flastmodなどでもvirtualで絶対パス指定でいけるんですけど、そのshtmlファイルが存在するディレクトリーより上位にさかのぼる位置のファイルは指定出来ないようです。

No.2補足のところでご呈示の方法ですけど、<img src>で一旦呼び出してファイル作成だと、ブラウザがファイルを読みに行くタイミングが前後することがあるので、<script src="sample.cgi"> で直接呼び出してしまう方がよいと思います。
その場合、cgiでのheader記述は以下のようにしないとよけいな宣伝タグ挿入されてJavaScriptエラーになります。
print qq(Content-type: application/x-javascript;\n\n);

修正版 ●HTMLソース(sample.shtml)
----------
<HTML>
<HEAD><TITLE>CGIテスト</TITLE></HEAD>
<BODY>
<!--[JavaScriptファイルの読み込み]-->
<script type="text/javascript" src="/cgi-bin/sample.cgi">
</SCRIPT>
<noscript>
JavaScriptがオフのため表示出来なくて済みません。
</noscript>
</BODY>
</HTML>
----------
修正版 ●Perl-CGI(sample.cgi)
----------
#!/usr/local/bin/perl
print qq(Content-type: application/x-javascript;\n\n);

&sample;
exit;
sub sample{
  $format = "%04d/%02d/%02d %02d:%02d:%02d";
  my($sec, $min, $hour, $day, $month, $year, $week, $yday, $isdst) = localtime();
  print "document.write('";
  print sprintf ($format, $year+1900, $month+1, $day, $hour, $min, $sec);
  print "');\n";
}
----------
全角空白のindentはそのままです。コピー時は注意して下さい。
JavaScriptがオフだと実行されないのは致し方ないかな?

アクセス時刻でなくカウンターなら<img src>呼び出しの書き込みファイルでは「次番号」にしておけば、前回書き込んだファイルを#includeしても違和感はないように思います。
つまり、初期値を1から初めて先に表示用sample.datファイルを作っておきます。
で、No.2補足に有る方のsample.shtmlのscriptタグを以下に置き換えます。
<!--#include virtual="/cgi-bin/sample.dat" -->

SSIの替わりになる対策としては、たぶんこの2つくらいでしょうね。
あと、iframe かな? でもフレーム内にも宣伝が入ってくるのであんまり実用的ではないですけどね。

infoseekのフリーサーバーを利用している者です。
SSI #execが不可になったときに、#include を試してみましたが、その時はプログラムソースがそのままincludeされてましたが、それではあんまりだと、今はエラー表示になったようですね。
No.5でご呈示のHTTP_REFERER編集まではやってませんが、たぶん無理かと思います。
SSIでユーザープログラムを実行させることそのものを排除しているように思います。

あと、#includeに限らず#flastmodなどでもvirtualで絶対パス指定でいけるんですけど、そのshtmlファイ...続きを読む

QCGI/Perlという本はありますがCGI/PHPという本はないのはなぜですか?

アマゾンで調べると表題でCGI/Perlという本はありますがCGI/PHPという本はないのはなぜですか?

Aベストアンサー

なぜそのような書籍が無いのか結論から申し上げると「需要が無い」からです。
その理由はPHPとCGIの動作に起因し、PHP利用の最大のメリット(?なのでしょうか?)であるHTML組み込みなど利用できなくなるからです。

動作の概略(あくまで概略なので細かくするとキリがありません)を示しますと(右に長いのでテキストエディタなどにコピペしてみていただくと見やすいかと思います)

CGIの動作
 ブラウザ-[INTERNET]->Webサーバー -[CGI]-> システム:処理言語{Perl/C/Ruby...etc.}+プログラム:処理結果 -[CGI]-> Webサーバー -[INTERNET]->ブラウザ

PHPの動作
 ブラウザ-[INTERNET]->Webサーバー:PHP:処理結果 -[INTERNET]->ブラウザ

PHPを単体で処理できるようにインストール設定すればPHPをCGIとして利用することも可能です。当然、利用範囲がCGIの域を出なくなり、PHPとしてのメリットがなくなってしまいます。
そのような非効率的な運用利用をする方はほとんどいないので書籍にしても需要が無いと思います(何らかの事情で必要な方なら、WebサーバとCGIがしっかり理解できていれば簡単に実現できるかと思います)。

ちなみに、代表的なWebサーバApacheは外部組み込み機能を使ってPerlを「PHPの動作」と同じ動きをさせることができます。
そちらは「CGI」の範疇ではなく「Webサーバー構築」の分野ですのでそういった書籍を参考にしてください。

なぜそのような書籍が無いのか結論から申し上げると「需要が無い」からです。
その理由はPHPとCGIの動作に起因し、PHP利用の最大のメリット(?なのでしょうか?)であるHTML組み込みなど利用できなくなるからです。

動作の概略(あくまで概略なので細かくするとキリがありません)を示しますと(右に長いのでテキストエディタなどにコピペしてみていただくと見やすいかと思います)

CGIの動作
 ブラウザ-[INTERNET]->Webサーバー -[CGI]-> システム:処理言語{Perl/C/Ruby...etc.}...続きを読む

QCGI,Perlで下記のようなことを、行いたいと考えています。

CGI,Perlで下記のようなことを、行いたいと考えています。

 a.html
 b.html
 c.html

があり、
__________________________________
1:それぞれ、フォームに、テキストボックスが一つあります。
2:他のフォームに遷移できます。(例:a.htmlからc.hmtlのように)
3:各フォームに「A、B、Cの値を確認」ボタンがあります。
4:3のボタンをクリックすると、各テキストボックスで入力した
値が表示される。

【イメージ】
a.htmlのテキストボックスに、100を入力
b.htmlのテキストボックスに、200を入力
c.htmlのテキストボックスに、300を入力

した場合。

Aで入力された値は100です。
Bで入力された値は200です。
Cで入力された値は300です。
______________________________________
と表示させる、cgiを作成したいです。

又、その際、hiddenを使用して行う方法(手順)を教えて頂けないでしょうか。

ファイルに書き込むことで、値を保持しておくのではと
考えましたが、a.htmlの値100を書き込み、再度、a.htmlの
値を書き込むと、a.htmlのフォームから送られた値が2つ(1回目、2回目)書き込まれた
状態になるように思います。

今回のように、例えば、ファームの入力値を保持して他の(b.thmlなど)に
遷移し、ボタンをクリックすると、全フォームの値を表示するような場合、
どのような方法が考えられるのでしょうか?

どうぞ、宜しくお願いいたします。

CGI,Perlで下記のようなことを、行いたいと考えています。

 a.html
 b.html
 c.html

があり、
__________________________________
1:それぞれ、フォームに、テキストボックスが一つあります。
2:他のフォームに遷移できます。(例:a.htmlからc.hmtlのように)
3:各フォームに「A、B、Cの値を確認」ボタンがあります。
4:3のボタンをクリックすると、各テキストボックスで入力した
値が表示される。

【イメージ】
a.htmlのテキストボックスに、100を入力
b.htmlのテ...続きを読む

Aベストアンサー

CGIはブラウザからサブミットされたデータを受信して処理します。
基本的にはそれぞれ別個のフォームとなりますので、いずれかひとつのフォームでサブミットした場合はそのフォームの内容のみしかサブミットできません。
よって、サブミットする側の問題なのでCGI側ではどうすることも出来ません。
これを解決するにはクライアント(ブラウザ)側での処理を行う以外に手は有りませんので、必然的にJavaScriptを用いて以下の条件を満たすことで全ページのフォーム内容をサブミットすることが可能となります。

1.a,b,cのhtmlは名前付きのフレーム内に確実に存在すること(別窓だと表示不足処理がめんどくさい->たとえば「a.html」しか開いていない)
2.各html内のフォームにそれぞれ別個のname指定があること

例として
a.htmlから別のフレームのhtml内のフォームにあるテキストフォームを参照する場合は

変数名 = parent.フレーム名.document.フォーム名.テキストフォーム名.value;

で取得できますので、これをhiddenフォームに代入してからサブミットすればよいです。

サーバとクライアントという関係が介在するようなWebプログラミングは、サーバ側の処理(CGIやPHPなど)とクライアント側の処理(JavaScriptなど)をしっかり判別理解して取り組まないとまともに動作するものは出来ません。

CGIはブラウザからサブミットされたデータを受信して処理します。
基本的にはそれぞれ別個のフォームとなりますので、いずれかひとつのフォームでサブミットした場合はそのフォームの内容のみしかサブミットできません。
よって、サブミットする側の問題なのでCGI側ではどうすることも出来ません。
これを解決するにはクライアント(ブラウザ)側での処理を行う以外に手は有りませんので、必然的にJavaScriptを用いて以下の条件を満たすことで全ページのフォーム内容をサブミットすることが可能となります。

1....続きを読む


このカテゴリの人気Q&Aランキング

おすすめ情報