- ベストアンサー
CGIからCGIを、CGI環境変数付きで実行するには?
CGI(Perl)からCGI(Perl)を実行してその出力を得るには どうしたら良いでしょうか。 そのCGIがもっている環境変数(IPアドレスとか、POSTデータ)も 渡したいのですが・・・。 Openでパイプを使ってやればいいとまではわかり、 環境変数などを渡さないで純粋にCGIを実行させて その出力を受け取るところまでは出来ました。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
Openでパイプを使って起動した子プロセスには、環境変数は全てコピーされるはずです。 どの変数が消えたり変ったりしてますか? > 環境変数(IPアドレスとか、POSTデータ) CGIパラメーターが環境変数として渡されるのは GETメソッドの場合です。 (GETメソッドの場合、URL上でも xxxx?a=1&b=2 の様にパラメーターを表現できます) POSTメソッドの CGIパラメーターは、STDIN から入力します。 だから、これを子プロセスに引き継ぐには、それなりの工夫が必要です。 工夫というと、例えば以下のいずれかです。 ・ 親が STDIN を読む前に子プロセスを起動する。 ・ 親は入力した STDIN を記憶しておき、子プロセスの起動後に記憶内容をパイプで渡す。 子プロセスの STDOUT を親がパイプで読みたいなら、さらに面倒。 (パイプ指定の open() だけでは STDIN/STDOUT 両方のパイプは多分不可) いずれの場合も、CGI.pm なんかを親が使うとまずいかも知れません。
お礼
ありがとうございます。下のような感じでできました・・・。 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を実行することには成功しましたので、 あらためて質問をたてさせていただきます。