HTMLのフォームからsubmitしてcgiにアクセスする。
cgiでHTMLからのポストとゲットを読み込んで
ログファイルに書き込む。

というCGIを作ったんだけど、
print "Content-type: text/html\n\n";
を書かないと、submitしてからcgiの処理が
止まらないみたいでした。
print "Content-type: text/html\n\n";
を書くと、処理は正常になるけど、cgiファイルに
ジャンプしてしまいます。

openで書き込みをする場合、cgiに飛ばずに
処理する方法を教えてください。

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

A 回答 (5件)

サンプル作ったげるから自分で考えてください。


いろいろなやり方があります(ありすぎてどれでも良いですね)
(今回は、A__さんが<img なら~)とあったので、
img書いてみますか。。。。

a.html
--------------
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=shift_jis">
<style type="text/css"><!--
#layer { position: absolute; top: 0px; left:0px; width: 0px; height: 0px; visibility: visible }-->
</style>
</head>

<script language="javascript"><!--
function CGI() {
layer.visible=false;
layer.innerHTML="<img src='a.cgi?"+document.myForm.textareaName.value+"' width=0 height=0>";
}
//--></script>

<body>
<form name="myForm">
<textarea name="textareaName"></textarea>
<input type="button" name="submitButtonName" value="AB" onclick="return CGI();">
<div id="layer">a</div>
</body>
</html>

a.cgi
-----------------
#/usr/bin/perl;

$_=$ENV {"QUERY_STRING"};

open FH, ">text.txt";
print FH $_;


text.txt
-----------------
空っぽでもなんでもOK


あとは、研究してみてください。今回はGETの例ですね。
POSTは。。。まぁ、応用すればわかるでしょう。
頑張ってくださいね。
    • good
    • 0
この回答へのお礼

後からimgタグを書いてCGIにアクセスするという
ことができてしまうんですねー。
とても勉強になりました。
POSTデータはGETにまわして、教えてくれた
ソースを利用して、おとなしく送信させることができました。
ありがとうございます。

お礼日時:2001/10/19 22:00

フォームからSubmitしてCGI処理した後に、ブラウザのアドレスバーに表示されるURLをCGIのものではなくHTMLにしたいということですよね。



それなら、補足で書いていらっしゃるように、
print "Location:http://www.yahoo.co.jp/\n\n";
等とするしか方法はありません。
それで何か問題があるのでしょうか?
    • good
    • 0
この回答へのお礼

Submit後のアドレスバー表示をHTMLにしたい
というのではなく、CGIにジャンプしてしまう
というのをやめさせたたかったんです。
print "Location:http://www.yahoo.co.jp/\n\n";
の方法でも、同じアドレスだけど、ジャンプするから
HTMLの表示状態が初期化されてしまうから
それも避けられる方法を探していました。

お礼日時:2001/10/19 21:56

#2の補足ですが。

。。
CGIとPerlについてご存知であればわかると思っていたのですが。。。

CGIはWebの操作にたいしてWeb画面に応答を返します。
<IMG A=****.cgi> とやるケースでも、「画像データ」という応答を返しています。
そういう意味では、「処理が止まらない」ように見えるのは、「CGIからの応答を返していない」ために、IEでは「応答を待ちきり」の状態になっているということだと思います。
# ようはprint文で何らかの応答を返す必要があるということです

話を戻しますが、ログファイルにデータを書き込むCGIを作成する場合、普通はCGIの実行結果をWeb画面に出力するように作ると思います。
# 「ログの書き込みが正常終了しました」とか・・・

そうしないと、ご質問の事象のように、処理が終わっているのかどうかわからないような事態になるんだと思いますよ。

この回答への補足

img src= なら

#!/usr/bin/perl

@jikan = localtime(time);
open(F,">>aaa.txt");
print F @jikan;
close(F);

で、HTMLのままcgi処理できることが分かりました。
これならcgiへのアクセスはIEを見ていて、
一瞬で終わっただろうと感じました。

submitではHTMLのままcgiでゲットとポストを
読んで書き込む方法はありませんか?

補足日時:2001/10/17 22:23
    • good
    • 0

CGIの処理の流れについては下記のURLが参考になると思います



参考URL:http://tohoho.wakusei.ne.jp/wwwcgi.htm

この回答への補足

ありがとうございます。
一括ダウンロードでCGIとPerlは全て熟読しました。

補足日時:2001/10/17 20:38
    • good
    • 0

おっしゃっている意味がよくわからないのですが、


「CGIの処理が止まらない」とはどういう意味なのでしょう?
無限ループ?
print "Content-type: text/html\n\n";
というのは「これからprintするものは、テキスト形式で書かれたHTMLだよ」
という宣言のようなものなので、HTMLを出力するときに必須です。
これを書かないとエラーになるのですが、そういうことではないのですか?

また、「CGIに飛ばずに処理」とおっしゃっていますが、CGIにジャンプせずに
(CGIを呼び出し、実行せずに)CGIで処理を行うなんて不可能です。
もし、処理後に表示するページの拡張子をHTML等にしたいのであれば、
何も表示せずに処理後表示したいHTMLに強制ジャンプをさせればよいです。

この回答への補足

CGIの処理が止まらない
というのは、IEを見ていてなんとなくそう思った
だけなんだけど、エラー表示は出ないんです。

例えば、カウンターなら、HTMLを開けば
img src=a.cgi とかでアクセスして処理ができるけど
openして書き込みをする場合はcgiへのシャンプは
必ずしなければいけないのかを知りたいです。

cgiに飛ばないといけないけど、
print "Content-type: text/html\n\n";
は書く必用無いということなら
print "Location:http://www.yahoo.co.jp/\n\n";
とかで、すぐに元のHTMLに戻らせたいと思っています。

補足日時:2001/10/17 20:17
    • good
    • 0

このQ&Aに関連する人気のQ&A

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


人気Q&Aランキング

おすすめ情報