UNIXのcgiで環境変数の使用方法について

[上に] [前に] [次に]
やまもり 1999/03/01(月) 15:16:43
UNIXでcgiからある環境変数を取得するのですが、通常環境変数は
どこで設定するものなのでしょうか?
・cgi上で環境変数をセットする?
・httpのサービスのどこかで設定する?
・環境変数は使用できない?(固定で使用している環境変数があるから)

B-Cus 1999/03/01(月) 15:40:37
普通、
 1.UNIXのプロセス自体に設定されている値
  (というか、httpdが子プロセスをfork/execするときに引き継がれる値、かな)
 2.httpdが設定する値
です。

1は、PATHなど。
2は、QUERY_STRING、REMOTE_ADDR、HTTP_USER_AGENT、SERVER_NAMEなど。

CGI上で環境変数を書き換えることは、普通しないと思いますが、
必要なら書き換えても構わないでしょう。例えばPATHとかね。

設定されている環境変数を見たいなら、
 #!/usr/local/bin/perl
 print "Content-type: text/plain\n\n";
 foreach ( keys %ENV ){
  print "\$ENV{$_} = $ENV{$_}\n";
 }
など。

やまもり 1999/03/01(月) 15:52:00
例えば、cgiの中であるディレクトリをみていて、cgiのプログラム
を変更しないでディレクトリ位置を変更したい場合、環境変数を
使用すればプログラムを変更しないで、参照するディレクトリを
変更できるようなると思いますが、httpdが設定する環境変数以外
の環境変数はどこで設定すればよいのでしょうか?

B-Cus 1999/03/01(月) 16:17:55
> 例えば、cgiの中であるディレクトリをみていて、cgiのプログラム
> を変更しないでディレクトリ位置を変更したい場合

意味がよく分かりませんが、例えば
 if ( $ENV{HOGE}==1 ){
  $dir = "/hoge";
 } else {
  $dir = "/fuga";
 }
 opendir(DIR,$dir);
などということですか?

そういう場合は、CGIを呼び出すときに hoge.cgi?hoge=1 などとするのが
一般的だと思います。

やまもり 1999/03/01(月) 18:20:43
[[解決]]
わかりました。ありがとうございます。

[上に] [前に] [次に]