プロが教えるわが家の防犯対策術!

CGI(Perl)からCGI(Perl)を実行してその出力を得るには
どうしたら良いでしょうか。

そのCGIがもっている環境変数(IPアドレスとか、POSTデータ)も
渡したいのですが・・・。

Openでパイプを使ってやればいいとまではわかり、
環境変数などを渡さないで純粋にCGIを実行させて
その出力を受け取るところまでは出来ました。

A 回答 (1件)

Openでパイプを使って起動した子プロセスには、環境変数は全てコピーされるはずです。

どの変数が消えたり変ったりしてますか?


> 環境変数(IPアドレスとか、POSTデータ)

CGIパラメーターが環境変数として渡されるのは GETメソッドの場合です。 (GETメソッドの場合、URL上でも xxxx?a=1&b=2 の様にパラメーターを表現できます)

POSTメソッドの CGIパラメーターは、STDIN から入力します。 だから、これを子プロセスに引き継ぐには、それなりの工夫が必要です。

工夫というと、例えば以下のいずれかです。

・ 親が STDIN を読む前に子プロセスを起動する。

・ 親は入力した STDIN を記憶しておき、子プロセスの起動後に記憶内容をパイプで渡す。 子プロセスの STDOUT を親がパイプで読みたいなら、さらに面倒。 (パイプ指定の open() だけでは STDIN/STDOUT 両方のパイプは多分不可)

いずれの場合も、CGI.pm なんかを親が使うとまずいかも知れません。
    • good
    • 0
この回答へのお礼

ありがとうございます。下のような感じでできました・・・。
open (IN, "perl C:\\test\\hoge.cgi|");
while ( $line = <IN>) {
print $line;
}
close(IN);
が・・・実をいえば、実現したいことは、
CGIでHTMLファイルを読み込んで、その中のSSIを解析し、それをCGI上で実現することなんです。

上のような方法で、
<!--#exec cmd="test.cgi" -->
という記述をCGIで認識してそれを実行し出力することには成功しました。
また、環境変数もきちんと渡せていました。
しかし・・・例えば、test.cgi?a=bのようにパラメータをつけての実行はできませんでした。

一応、CGIからCGIを実行することには成功しましたので、
あらためて質問をたてさせていただきます。

お礼日時:2009/01/04 01:21

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