- ベストアンサー
PerlでHTMLを読み込み記述されたSSIコマンド(exec)の実行を実現するには。
HTMLファイルを読み込んで表示するCGIを作っています。 それで、そのHTMLファイルに記述されたSSIコマンドを、 そのCGIで認識して、それを実行する。ということを実現したいと思っています。 includeコマンドは簡単に実現ができたのですが、 execコマンドが完全には実現できません・・・。 一応、openのパイプを使って、 <!--#exec cmd="test.cgi" --> のようなコマンドを認識しそれを実行して返すことはできました。 しかし、test.cgi?a=wのように パラメータをつけての実行が実現できません。 もちろん、SSIと同じように、 execコマンドで実行する先のCGI、プログラムなどを 改変することなくそのまま実行できることが条件です。 (例えば、$ENV{'QUERY_STRING'}ではなくARGVを使うようにするのではダメなんです) お知恵をお貸しいただけると幸いです。 どうかよろしく御願いいたします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
> しかし、test.cgi?a=wのように > パラメータをつけての実行が実現できません。 このとき、test.cgi をどのように呼び出していますか ? zxcv0000 さんが書かれているように、事前に $ENV{REQUEST_METHOD} や $ENV{QUERY_STRING} を 設定していますか ? CGI.pm を使うと、コマンドラインから呼び出す場合も test.cgi a=w のように呼び出せるのでお勧めです。参考 URL のデバッグ 方法のところを見てください。
その他の回答 (1)
- zxcv0000
- ベストアンサー率56% (111/196)
$ENV{'QUERY_STRING'} に設定したパラメーターを呼ばれた CGI が認識しないのなら、怪しいのは以下では無いでしょうか。 1 REQUEST_METHOD環境変数の値が 'GET' になっていない。 自分自身が GETメソッド以外(POSTメソッド等)で起動されたのなら、exec の前に 'GET' に変更してください。 2 QUERY_STRING環境変数に設定する書式に問題がある、あるいは実行する先の CGI と相性が悪い。 ・パラメーター名に記号を使って無いか ・複数パラメーターの区切り文字(& とか ;) は exec する先の CGI の期待と一致しているか (これは、エンコードしない) ・値中の記号をエンコードしているか、そのエンコード法は exec する先で行われるデコード処理に整合しているか (普通は %xx 方式で、区切り文字が出現したらエンコードする事が特に重要) とかだと思います。