- ベストアンサー
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は取得できなくなるものなんでしょうか? それとも、取得できる書き方があるのでしょうか? どなたか、ご教示ください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
cgiを実行した時点で子プロセスが起動し、環境変数の引き継ぎが行われないからだと思います。 <!--#include virtual="/cgi-esp/test_env.cgi?$QUERY_STRING" --> と、cgiに引数を渡すようにすれば良いと思います。
その他の回答 (1)
- honiyon
- ベストアンサー率37% (331/872)
こんにちは、honiyonです。 そのやり方では、CGIに引数が渡されていません。 なんらかの方法で、 <!--#include virtual="/cgi-esp/test_env.cgi?name=aaa"--> としてあげるか、その他の方法でCGIに引数を渡してあげる必要があります。 解決するには・・・非効率的な方法しか思いつかないので、それは識者の方にお任せ、ということで^^;
お礼
さっそくありがとうございます。 やっぱりそのように引数を渡さないとだめなんでしょうかね・・・。となると、ローカルではちゃんと取得できたのが不思議なんです。ローカルのテスト環境(httpd)がそういう仕様なんでしょうか・・・。
お礼
へぇ~~~~!そういう方法があるんですか! 今日はもう帰宅してしまったので、 明日、会社に行ったらすぐ試してみます! ありがとうございます!!
補足
<!--#include virtual="/cgi-esp/test_env.cgi?$QUERY_STRING" --> の方法で解決できました。 どうもありがとうございました! でもこの方法だと、今度はローカルで動作しませんでした。Perlのバージョンが同じでも、環境によって動作の仕方はいろいろ違うんですね。勉強になりました。