• ベストアンサー

QUERY_STRING が、SSIを使用すると取得できません

以下の2ファイルを使用して、 環境変数QUERY_STRINGの取得のテストをしています。 ------------------------------------------------ ファイル名:test_env.cgi ------------------------------------------------ 内容: print <<"HERE"; $ENV{'QUERY_STRING'}<br> $ENV{'REMOTE_ADDR'} HERE ------------------------------------------------ ------------------------------------------------ ファイル名:test_env.shtml ------------------------------------------------ 内容: <html> <head> <title> 環境変数のテスト </title> </head> <body> <!--#include virtual="/cgi-esp/test_env.cgi"--> </body> </html> ------------------------------------------------ ブラウザのアドレスバーに test_env.cgi?name=aaa と入力して実行すると、 QUERY_STRING、REMOTE_ADDR の両方が出力されますが、 test_env.shtml?name=aaa だと、 ローカルでは両方出力できたのに、 サーバにアップするとQUERY_STRINGが出力されません。 SSIを使用してCGIファイルを実行した場合、 QUERY_STRINGは取得できなくなるものなんでしょうか? それとも、取得できる書き方があるのでしょうか? どなたか、ご教示ください。

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

  • ベストアンサー
  • yatokesa
  • ベストアンサー率40% (201/496)
回答No.2

cgiを実行した時点で子プロセスが起動し、環境変数の引き継ぎが行われないからだと思います。 <!--#include virtual="/cgi-esp/test_env.cgi?$QUERY_STRING" --> と、cgiに引数を渡すようにすれば良いと思います。

mdk
質問者

お礼

へぇ~~~~!そういう方法があるんですか! 今日はもう帰宅してしまったので、 明日、会社に行ったらすぐ試してみます! ありがとうございます!!

mdk
質問者

補足

<!--#include virtual="/cgi-esp/test_env.cgi?$QUERY_STRING" --> の方法で解決できました。 どうもありがとうございました! でもこの方法だと、今度はローカルで動作しませんでした。Perlのバージョンが同じでも、環境によって動作の仕方はいろいろ違うんですね。勉強になりました。

その他の回答 (1)

  • honiyon
  • ベストアンサー率37% (331/872)
回答No.1

こんにちは、honiyonです。  そのやり方では、CGIに引数が渡されていません。  なんらかの方法で、 <!--#include virtual="/cgi-esp/test_env.cgi?name=aaa"-->  としてあげるか、その他の方法でCGIに引数を渡してあげる必要があります。  解決するには・・・非効率的な方法しか思いつかないので、それは識者の方にお任せ、ということで^^;    

mdk
質問者

お礼

さっそくありがとうございます。 やっぱりそのように引数を渡さないとだめなんでしょうかね・・・。となると、ローカルではちゃんと取得できたのが不思議なんです。ローカルのテスト環境(httpd)がそういう仕様なんでしょうか・・・。