- ベストアンサー
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は取得できなくなるものなんでしょうか? それとも、取得できる書き方があるのでしょうか? どなたか、ご教示ください。
- mdk
- お礼率54% (12/22)
- Perl
- 回答数2
- ありがとう数3
- みんなの回答 (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)がそういう仕様なんでしょうか・・・。
関連するQ&A
- $ENV{'QUERY_STRING'}以外で引数を取得するには?
CGI上で$ENV{'QUERY_STRING'}を使用しないで引数を取得するにはどうしたらいいのでしょうか? hoge.cgi?XXXX の XXXX を取得したいのですがある理由によって$ENV{'QUERY_STRING'}が使用できません。 よろしくお願いいたします。
- ベストアンサー
- CGI
- SSIで呼び出したURLの取得
a.shtmlから ../a.cgi をSSIで呼び出したとき、a.shtmlのURLを取得したいのですが、うまい方法はありますでしょうか。 $ENV{'REQUEST_URI'} $ENV{'SCRIPT_FILENAME'} $ENV{'SCRIPT_NAME'} で表示してみたら、a.cgiのURL(パス)が出てきて、a.shtmlのURL(パス)が出てこなかったのです。 よろしくお願いします。
- ベストアンサー
- Perl
- SSIを呼び出した元ファイルの名前を取得することはできますか?
アクセスログを取るだけの単純なCGIを作って動かしています。 SSIを使って.plファイルを呼び出してログにホスト名やリンク元、ブラウザ名を記録しています。 最近、掲示板にスパムが増えたのでそのログも一緒に取ろうと思うのですが、ログにアクセスされたページも記録したいと思います。 <!--#exec cmd="./CGI/real_log.pl?1"--> のようにして$ENV{'QUERY_STRING'}で識別番号を取って記録することもできると思いますが、いたずらに備えてこれを使わずにできればと思っています。環境変数にはそれらしいものがないのですが、何か他に良い方法はあるでしょうか?
- ベストアンサー
- CGI
- ページのアドレスを取得する記述方法を教えてください。
たとえば、IP、HOSTを取得するには、 $host = $ENV{'REMOTE_HOST'}; $addr = $ENV{'REMOTE_ADDR'}; if(!$host && $addr){ $host = (gethostbyaddr(pack("C4",split(/\./,$addr)),2))[0]; } と記述して、 センドメール部分に、 $host , $addrをどこかに記述します。 これと同じように、ページのアドレスを取得する記述はどうすればいいのか教えてください。
- 締切済み
- CGI
- SSIの表示
perl/cgiの勉強中でssiでhtmlへの埋め込みを行いたいのですが、何故か出力が2度されてしまいます。 以下実行プログラムと結果です。 [test.cgi] #!/usr/bin/perl -w use strict; use warnings; print "Content-type:text/html\n\n"; print "hoge"; exit; [test.shtml] <html> <head></head> <body> <!--#include virtual="/cgi-bin/test.cgi"--> </body> </html> [出力] hogehoge …となってしまいます。どなたかご教示願えませんでしょうか? よろしくお願いいたします。
- 締切済み
- CGI
- 送信者のIPを取得するには
現在メールフォームを作っています。 送信者の情報を取得する作りにはしていません。 迷惑メールが届き出してからでは遅いので、 ホスト名やIPアドレスを取得するフォームにしたいのですが、 <INPUT TYPE="hidden" NAME="env_report" VALUE="取得したい情報の属性"> という記述をCGIファイルに書けばいいのでしょうか。 また、下記の記述をどこに書くのかも分かっていません。 REMOTE_HOST 送信者(入力者)のホスト名 REMOTE_ADDR 送信者(入力者)のIPアドレス どなたかご教授をお願いします。
- 締切済み
- ネットワーク
- REMOTE_USERは何故取得できない?
ApacheのWebサーバーに、クライアント使用者の身元を確認したいのです。 サーバーは簡単認証を設定してあります。 CGIプログラムに、$ENV{'REMOTE_USER'} で環境変数を取得しようと思いますが、 何の情報も得られませんでした。 また、http://www.futomi.com/lecture/env_var/ のサンプルプログラムを使って 全ての環境変数をプリントアウトしましたが、REMOTE_USER はありませんでした。 何故でしょうか。 ご存じの方がいれば是非教えて頂きたいのです。どうぞ宜しくお願い致します。
- 締切済み
- CGI
- CGIでフォームデータを取得できません
CGI(perl)の標準入力についてお伺いいたします。 PC上でテストし動作を確認したCGIをプロバイダのCGIサーバに移植しましたが、 正常に実行終了するものの、標準入力によるフォームデータの取得ができません。 フォームデータを受け取る変数が空になってしまいます。 PCとプロバイダのCGIサーバとでは、CGIスクリプトの記述方法が異なるのでしょうか。 書籍、ネットをだいぶ調べましたが、解決策が見当たりませんでした。 このような現象の原因について、お心当たりのある方がおられましたら、 ご教示いただきたいです。 (1)PC動作環境 a.OS: Windows 7 b.ブラウザ : Interne Eexplorer 11 c.CGIサーバ: Apache 2.4 d.perl : Activeperl 5.20 (2)CGIスクリプト(標準入力の部分) 尚、フォームでは、method="POST"を指定しております。 # フォームデータの取得 if($ENV{'REQUEST_METHOD'} eq 'POST') { read(STDIN, $query, $ENV{'CONTENT_LENGTH'}); } else { $query = $ENV{'QUERY_STRING'}; }
- 締切済み
- CGI
- 【 REMOTE_HOSTの値の取得方法について 】
既製のCGIを設置するのがイッパイイッパイの 初心者ですm(__)m REMOTE_HOSTの値を取得して表示させたいのですが 当方レンタル中のサーバーの初期設定では取得できず 下記の如くの手順で取得するように表示してありましたが どうにも理解できず困っております。 下記の「Perl内」とは何処の事を指しているのか アドバイスを頂きたくお願い申し上げます。 ****以下、該当サーバーの説明文引用***** 【 REMOTE_HOSTの値の取得方法について 】 レンタルサーバーの処理速度を優先して、初期状態ではIPアドレスからDNSの参照をしないように設定している為、REMOTE_HOSTの値を取得したい場合はPerl内で下記の記述をして下さい。 $addr = $ENV{'REMOTE_ADDR'}; $host = gethostbyaddr(pack('C4',split(/\./,$addr)),2) || $addr;
- ベストアンサー
- Perl
- PerlでIPアドレスを取得する方法
Perl5.6 or 5.8を使っております。 環境変数からIPの取得をするのは、CGIで動いている前提?ですが、 CGIでなくてperlスクリプトが単体で動作した場合に他の例えばサーバーのアドレスを知るにはどのようにしたらよいのでしょうか? 自アドレスはgethostbyaddrで取得できます。 REMOTE_ADDRの値を取得したいです。
- ベストアンサー
- Perl
お礼
へぇ~~~~!そういう方法があるんですか! 今日はもう帰宅してしまったので、 明日、会社に行ったらすぐ試してみます! ありがとうございます!!
補足
<!--#include virtual="/cgi-esp/test_env.cgi?$QUERY_STRING" --> の方法で解決できました。 どうもありがとうございました! でもこの方法だと、今度はローカルで動作しませんでした。Perlのバージョンが同じでも、環境によって動作の仕方はいろいろ違うんですね。勉強になりました。