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 が提供している環境変数操作用モジュールの機能も利用できません.したがって,新規に環境変数を定義できませんでした.