OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

CGIへ飛ばずに処理だけさせたい

  • 暇なときにでも
  • 質問No.152918
  • 閲覧数150
  • ありがとう数2
  • 気になる数0
  • 回答数5
  • コメント数0

お礼率 59% (194/328)

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に飛ばずに
処理する方法を教えてください。
通報する
  • 回答数5
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

質問者が選んだベストアンサー

  • 回答No.5
レベル11

ベストアンサー率 61% (157/255)

サンプル作ったげるから自分で考えてください。
いろいろなやり方があります(ありすぎてどれでも良いですね)
(今回は、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は。。。まぁ、応用すればわかるでしょう。
頑張ってくださいね。
お礼コメント
A__

お礼率 59% (194/328)

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

その他の回答 (全4件)

  • 回答No.1
レベル11

ベストアンサー率 42% (103/245)

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

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

お礼率 59% (194/328)

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:27


  • 回答No.2
レベル8

ベストアンサー率 46% (13/28)

CGIの処理の流れについては下記のURLが参考になると思います ...続きを読む
CGIの処理の流れについては下記のURLが参考になると思います
補足コメント
A__

お礼率 59% (194/328)

ありがとうございます。
一括ダウンロードでCGIとPerlは全て熟読しました。
投稿日時 - 2001-10-17 20:38:25
  • 回答No.3
レベル8

ベストアンサー率 46% (13/28)

#2の補足ですが。。。 CGIとPerlについてご存知であればわかると思っていたのですが。。。 CGIはWebの操作にたいしてWeb画面に応答を返します。 <IMG A=****.cgi> とやるケースでも、「画像データ」という応答を返しています。 そういう意味では、「処理が止まらない」ように見えるのは、「CGIからの応答を返していない」ために、IEでは「応答を待ちきり」の状態にな ...続きを読む
#2の補足ですが。。。
CGIとPerlについてご存知であればわかると思っていたのですが。。。

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

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

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

お礼率 59% (194/328)

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:02
  • 回答No.4
レベル11

ベストアンサー率 31% (72/232)

フォームからSubmitしてCGI処理した後に、ブラウザのアドレスバーに表示されるURLをCGIのものではなくHTMLにしたいということですよね。 それなら、補足で書いていらっしゃるように、 print "Location:http://www.yahoo.co.jp/\n\n"; 等とするしか方法はありません。 それで何か問題があるのでしょうか? ...続きを読む
フォームからSubmitしてCGI処理した後に、ブラウザのアドレスバーに表示されるURLをCGIのものではなくHTMLにしたいということですよね。

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

お礼率 59% (194/328)

Submit後のアドレスバー表示をHTMLにしたい
というのではなく、CGIにジャンプしてしまう
というのをやめさせたたかったんです。
print "Location:http://www.yahoo.co.jp/\n\n";
の方法でも、同じアドレスだけど、ジャンプするから
HTMLの表示状態が初期化されてしまうから
それも避けられる方法を探していました。
投稿日時 - 2001-10-19 21:56:35
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ