Delphi Programming / Object Pascal
サイトのトップページへ リンクのページへ ロゴマーク
[掲載 2022年05月31日] [更新 2022年05月31日] Delphi 一般・その他 [未分類 - OS の操作等]
HTTP サーバの環境変数
動作確認等 Windows 7 U64(SP1) + FireFox 88.0.1 (64 ビット)
[整理番号 - 1800]







HTTP サーバの環境変数


HTTP サーバ (Web サーバ) の環境変数を、CGI (本ページでは perl 言語を使用) で取得する例です。
この環境変数は、CGI や PHP で使用することがあるので、CGI 環境変数、あるいは PHP サーバ環境変数と言うこともあります。





01_ HTTP サーバの環境数取得用の CGI を作成


以下のコードをテキストエディタで作成し、拡張子を .cgi にして保存します。保存のコードページは UTF-8N (BOM なし) にします。


リスト1
テストに使用した CGI のコード。UTF-8 で保存
#!/usr/local/bin/perl

print "Content-type: text/html\n\n";
print "<html>\n";
print "<head>\n";
print "<title>環境変数取得</title>\n";
print "<meta http-equiv='Content-Type' content='text/html; charset=UTF-8'>\n";
print "</head>\n";
print "<body>\n";
print "環境変数一覧表示テスト<br>\n";

foreach $key (keys %ENV) {
  print "$key : $ENV{$key}<br>\n";
  }

print "</body>\n";
print "</html>\n"; 



保存したファイルを Web サーバの、CGI が実行可能なディレクトリ内に転送します。筆者が使用しているレンタルサーバでは、任意のディレクトリで CGI を実行できます。今回は cgis というディレクトリを作成して、CGI ファイルをそのディレクトリ内に置きました。
CGI ファイルのパーミッションの設定で [読み込み] と [実行] を設定します。この設定をしないと GGI が実行できません。500 internal server error が発生します。



図1
CGI のパーミッション




02_ CGI を実行して HTTP サーバの環境変数のリストを取得


下図は実行結果です。ウェブブラウザに表示しています。



図2
環境変数のリストを取得

以下のように、sort コマンドを使用すると、環境変数の名前でソートできます。



リスト2
テストに使用した CGI のコード。UTF-8 で保存
#!/usr/local/bin/perl

print "Content-type: text/html\n\n";
print "<html>\n";
print "<head>\n";
print "<title>環境変数取得</title>\n";
print "<meta http-equiv='Content-Type' content='text/html; charset=UTF-8'>\n";
print "</head>\n";
print "<body>\n";
print "環境変数一覧表示テスト (ソート)<br>\n";

foreach (sort keys %ENV) {
  print "$_ = $ENV{$_}<br>\n"; 
  }

print "</body>\n";
print "</html>\n"; 




03_HTTP サーバの特定の環境変数の値を取得


特定の環境変数の値だけを取得するには、例えば次のような CGI で可能です。



リスト3
テストに使用した CGI のコード。UTF-8 で保存
#!/usr/local/bin/perl

print "Content-type: text/html\n\n";
print "<html>\n";
print "<head>\n";
print "<title>環境変数取得</title>\n";
print "<meta http-equiv='Content-Type' content='text/html; charset=UTF-8'>\n";
print "</head>\n";
print "<body>\n";
print "環境変数取得テスト<br>\n";

$key = "SERVER_SOFTWARE";
$envvalue = $ENV{$key};
print "$key : $envvalue";

print "</body>\n";
print "</html>\n"; 


上の CGI の実行結果です。SERVER_SOFTWARE という環境変数の値が Apache となっています。これは、CGI プログラムを起動した Web サーバソフトウエアの名前です。



図3
特定の環境変数の値を取得




04_ HTTP サーバに環境変数を追加


HTTP サーバに新しい環境変数が定義できれば、Google Maps API のキーのように、他人に見られたり読まれたくない値を隠すことができます。新しく定義した環境変数は、その環境変数が存在するサーバで、環境変数取得用のプログラムを実行しなければ取得できません。このことを利用します。以下の最初のリンクの記事を参考にしてください。
筆者が利用しているレンタルサーバでは、HTTP サーバの環境設定ファイル (Apache の環境設定ファイル) を操作できません。また、Apache が提供している環境変数操作用モジュールの機能も利用できません。したがって、新規に環境変数を定義できませんでした。