環境変数

みなさんが作ったホームページにどのような人がアクセスしてきたかを知りたいと思いませんか?

環境変数というものを使って、ある程度のことを知ることができます。 環境変数は、アクセスしたブラウザーがサーバーに対して送信されますので、 これらの情報はサーバー側で受け取ることができます。

Perl スクリプトでは、予約変数である %ENV に自動的に入ってきます。 %ENV は連想配列ですね。実際に環境変数の一覧を表示する CGI を作ってみましょう。 この CGI は連想配列 %ENV のキーをソートして表形式に出力しています。

#!/usr/bin/perl

print "Content-type: text/html; charset=utf-8\n";
print "\n";
print "<!DOCTYPE html>\n";
print "<html><head><meta charset=\"UTF-8\"><title></title></head><body>\n";
print "<table>\n";
for $key ( sort keys %ENV ) {
    print "<tr>\n";
    print "<td><code>${key}</code></td><td><code>$ENV{$key}</code></td>\n";
    print "</tr>\n";
}
print "</table>\n";
print "</body></html>";
exit;

ではこの CGI を実際に確かめてみましょう。

実際に確かめてみる

一般的な環境変数の一覧は以下のとおりです。

Key %ENV 意味
DOCUMENT_ROOT /var/www/html サーバのドキュメントルートのパス
GATEWAY_INTERFACE CGI/1.1 CGIバージョン
HTTP_ACCEPT */*  
HTTP_ACCEPT_ENCODING gzip, deflate, br  
HTTP_ACCEPT_LANGUAGE ja,en-US;q=0.9,en;q=0.8 ブラウザーの表示可能言語。二つ以上ある場合にはカンマ区切り。
HTTP_CONNECTION Keep-Alive  
HTTP_HOST www.futomi.com サーバのホスト名
HTTP_REFERER   リンク元のURL
HTTP_USER_AGENT Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36 あなたがお使いのブラウザーの種類・バージョンや、プラットフォームの情報が記載される。
PATH /usr/local/bin:/usr/bin:/bin  
QUERY_STRING    
REMOTE_ADDR 192.168.1.4 あなたのIPアドレス
REMOTE_HOST e139083.ap.example.jp あなたのホスト名
REMOTE_PORT 1376  
REMOTE_USER   BASIC 認証 (アクセス制限) を実施した場合にのみユーザー名が入る。
REQUEST_METHOD GET  
REQUEST_URI /lecture/env_var/exec/your_env.cgi あなたがリクエストしたURI
SCRIPT_FILENAME /var/www/html/lecture/env_var/exec/your_env.cgi  
SCRIPT_NAME /lecture/env_var/exec/your_env.cgi  
SERVER_ADMIN root@localhost サーバの管理者
SERVER_NAME www.futomi.com サーバの名前
SERVER_PORT 443 アクセスしたときに使ったTCPポート番号
SERVER_PROTOCOL HTTP/1.1 HTTP プロトコルのバージョン
SERVER_SOFTWARE Apache WWW サーバの種類

CGI でよく使う環境変数について詳しい解説を用意しましたので、ご覧ください。