• ベストアンサー

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を使うようにするのではダメなんです) お知恵をお貸しいただけると幸いです。 どうかよろしく御願いいたします。

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

  • ベストアンサー
  • t-okura
  • ベストアンサー率75% (253/335)
回答No.2

> しかし、test.cgi?a=wのように > パラメータをつけての実行が実現できません。 このとき、test.cgi をどのように呼び出していますか ? zxcv0000 さんが書かれているように、事前に $ENV{REQUEST_METHOD} や $ENV{QUERY_STRING} を 設定していますか ? CGI.pm を使うと、コマンドラインから呼び出す場合も test.cgi a=w のように呼び出せるのでお勧めです。参考 URL のデバッグ 方法のところを見てください。

参考URL:
http://perldoc.jp/docs/modules/CGI.pm-2.89/CGI.pod

その他の回答 (1)

  • zxcv0000
  • ベストアンサー率56% (111/196)
回答No.1

$ENV{'QUERY_STRING'} に設定したパラメーターを呼ばれた CGI が認識しないのなら、怪しいのは以下では無いでしょうか。 1 REQUEST_METHOD環境変数の値が 'GET' になっていない。 自分自身が GETメソッド以外(POSTメソッド等)で起動されたのなら、exec の前に 'GET' に変更してください。 2 QUERY_STRING環境変数に設定する書式に問題がある、あるいは実行する先の CGI と相性が悪い。 ・パラメーター名に記号を使って無いか ・複数パラメーターの区切り文字(& とか ;) は exec する先の CGI の期待と一致しているか (これは、エンコードしない) ・値中の記号をエンコードしているか、そのエンコード法は exec する先で行われるデコード処理に整合しているか (普通は %xx 方式で、区切り文字が出現したらエンコードする事が特に重要) とかだと思います。

関連するQ&A