Perl/CGIプログラムの環境変数

今回の学習内容は、環境変数についてです。

  1. 編集前記
  2. 環境変数とは?
  3. 環境変数の参照
  4. 環境変数の解説
  5. 編集後記

編集前記

Perl/CGIプログラミング学習を始める前に、まずは編集前記からお楽しみください(笑)。

今回の編集前記は「プログラムの流れを理解するコツ」についての話をします。

当然プログラムの流れを理解することなく、プログラムファイルを作成することや改造することはできませんから…。

それに、Perl/CGIに限らず、これはほぼすべてのプログラミング言語に当てはまる話ですから、覚えておくと後々役に立ちますよ。

それでは始めましょう。

Perl/CGIプログラミングについて学習し始めてから今日まで、人によって時間差はありますが…。

ここまででなんとなくでも「プログラムというのは、小さな処理の積み重ねである」ということが理解していただけているかと思います。

えっ?そんなこと思ったことないって?

そんな場合は、今思ってください(苦笑)。

Perl/CGIに限らずプログラムというのは、たとえどんなに大きく、どんなに複雑になっても、ひとつひとつの小さな処理の積み重ねでできています。

思い出してください、今まで登場してきました関数や変数、演算子などが混然一体となってひとつのPerl/CGIプログラムファイルを作り上げていましたよね。

そしてこれからは、関数の数はもっと増えていき、Perl/CGIプログラム自体も複雑になっていきます。

Perl/CGIプログラム作成にまだ慣れていない場合は、これから先が不安になることでしょう。

でも、心配ありません。

これからお話しすることを知っていれば、どれだけプログラムが複雑になっても、簡単に処理の流れを理解することができるようになります。

それではいきますよ。

実は、プログラムが行う動作パターンというのは、大きく分けて3種類しかありません。

どんなに複雑なプログラムでもひとつひとつ分解していくと、その動作パターンは、必ず3種類のどれかに当てはまることが説明できるのです。

ここで言う動作とは、プログラムコードが実行される順番のことです。

そして、そのパターンにはだいたい3種類しかないので、全部覚えてプログラム処理の動きを理解してしまいましょうというのが今回のお話です。

プログラムの動作つまり、プログラムコードが実行される順番を支持しているのは関数です。

ということは、「関数の動きというのは、大きく分けて3種類しかない」と言い換えることができるということですよね。

ここまではよろしいでしょうか?

ではその3種類について、お話していきましょう。

1つ目の動作パターンは直線的動き。

2つ目の動作パターンは分岐的動き。

3つ目の動作パターンはループ的動き。

これだけ読んで理解できたあなたは、復習ができている証拠ですね(笑)。

その調子でこれからもがんばってください。

わからないというあなたは、今からひとつひとつお話していきますので、ここで覚えていってください。

ではまず、1つ目の動作パターンである「直線的動き」についてです。

直線的動きとは読んだ意味そのままで、直線的つまり、まっすぐに動いていくパターンです。

まっすぐに動いていくので、プログラムファイルに書かれている関数の順番に規則正しく実行されていきます。

ちょうど、一本道がひたすら続いていくようなイメージです。

一本道ですから、だれがいつ通ることになっても、同じ場所からスタートし、同じ道を通り、同じゴール地点にたどり着きます。

Perl/CGIプログラムファイルというのは、なにも制限がかけられていなければ上から下へ順に実行されて行きます。

1つ目というのは、このなにも制限がかけられていない時の動きを表したパターンです。

続いて、2つ目の動作パターン「分岐的動き」についてお話します。

分岐的動きとは、あるポイントを境にその後の動作が別れているので、その中からひとつのみを選択し進んでいくという動きのことです。

ちょうど、一本道に続くわかれ道のイメージです。

一本道はだれがいつ通っても同じですが、わかれ道でどの道を選択するのかというのは、人によって違いますよね。

そして選択した道によって、その後の進み方が変わってくるわけです。

選んだ道の先には再び合流地点があるかもしれないし、実は行き止まりだったりなど、その道を選んでみないとわかりません。

これは、以前学習しましたif関数のことです。

if関数について忘れてしまった場合は、必ず復習しておきましょう。

最後に、3つ目の動作パターンである「ループ的動き」についてお話します。

ループ的動きとは、繰り返し行われる動きのことです。

これはちょうど、あらかじめひとつのビル内をすべて見学することが決まっているときに、ワンフロアーずつ見て回っていくときの行動ですね。

ワンフロアーつまり、1階ずつ見て回るという行動をビルの各階すべてに対して行い、すべての階を見終わったら終了です。

ループ的動きもこれと同じで、同じ処理を繰り返し、あらかじめ指定された条件を満たした時や、逆に条件を満たさなくなった時には繰り返し処理を終了します。

以前解説しましたforeachや、while関数などがこれにあたります。

ループ関数についてもよくわからない場合は、しっかり復習しておきましょう。

以上この3種類の動作パターンを組み合わせれば、どんな複雑なプログラムでも理解できます。

パッと見複雑なプログラムというのは、この3種類の組み合わせが少し複雑になっているだけの話ですから。

この連載ではまだPerl/CGIプログラミング学習を始めて間もないので、まだよくわからないかもしれません。

しかし、Perl/CGIプログラミングを独学している場合や、ほかのプログラミング言語を扱える場合には、ここでお話していることの意味がわかると思います。

試しに手近なプログラムに照らし合わせて考えてみてください。

言っている意味が理解できると思いますよ。

これが、プログラムの動きを理解するコツです。

そしてプログラミングというのは、作りたいもしくは改造したいプログラムの動きを理解してしまえば、作業の半分終わったも同じです。

あとは、理解した動きを書き起こすコーディングという作業と、デバックというプログラム修正作業だけですから。

これらもそれぞれコツみたいなものがあるのですが、これ以上紙面を割くわけにはいかないので、また別の機会にお話ししますね。

それでは、そろそろ今回のPerl/CGIプログラミング学習を始めましょう。

環境変数とは?

環境変数とは一言で言ってしまうと、周りのシステム属性を記録した変数のことです。

環境変数はあらかじめ変数名と意味が決まっているので、特定の環境変数を参照することによりシステム属性や設定といった情報をえることができるようになっています。

そして今回は、Perl/CGIプログラムを使って環境変数を参照し、その意味を学習していきましょうというのがテーマなわけです。

Perl/CGIプログラムから参照できる環境変数には、その情報の種類により、大きく3種類に分けることができます。

中には微妙なものや無理やりっぽいものもありますが、まぁ、ざっくり分けて3種類ということにしておきます(苦笑)。

1つ目は、Perl/CGIプログラムファイルを設置してあるインターネットサーバーの情報です。

インターネットサーバーシステムとして稼働させているソフトウェア名やバージョン番号はもちろん、Perl/CGIプログラムファイルを設置したパスなどの情報軍です。

インターネットサーバーソフトウェアとは、アクセスしてきた多数の利用者に対して、並行にサービスを提供するプログラムのことです。

ようするに、普通のパソコンをインターネットサーバーとして成り立たせているソフトウェアのことです。

インターネットサーバーソフトウェアにはほとんどの人が「Apache」もしくは「IIS」というプログラムを使っていると思います。

バージョン番号とは、単純にそのプログラムが作られた順番を表したもののことですね。

そのほかのサーバー情報として、Perl/CGIプログラムファイルが設置されている絶対パスやドメイン名などがわかるようになっています。

絶対パスとは、もっとも基本的な部分から順にたどって目的のファイル名までの道筋を表した文字列のことです。

根っこから順にたどっていますから、奥まったところにあるファイルを表現しようと思うほど、長くなります。

2つ目は、Perl/CGIプログラムファイルにアクセスしている端末情報です。

ようするに、どんなマシンやプログラムを使ってPerl/CGIプログラムファイルにアクセスしているのかということです。

パソコンからなのか?

携帯電話からなのか?

ゲーム機やPDAなのか?

といった情報ですね。

3つ目は、インターネット関連の情報です。

ユーザーのIPアドレスやホスト名、ひとつ前に閲覧していたウェブページのURL情報などです。

IPアドレスとは、それぞれの端末に割り当てられた番号のことです。

ホスト名とは、端末がインターネット接続する際、使用している特定のコンピューターのことです。

ホスト名ではなく、インターネット接続契約をしているプロバイダが管理運営しているコンピューター名といった方がわかりやすいでしょうか?

環境変数軍には、このようなさまざまな情報が記録されています。

そして必要に応じてPerl/CGIプログラム中で環境変数を参照し、それぞれの環境に応じたプログラム処理を作成することができるようになっているわけです。

環境変数の参照

Perl/CGIプログラムの環境変数にはあらかじめ、「%ENV」という名前の連想配列が使用されることが決められています。

したがって、プログラマー側で勝手に連想配列「%ENV」を定義することはできません。

どーしても同じ名前を使いたい場合には、小文字に置き換えるしかないです。

「ENV」とはおそらく「environment」の略だとは思うのですが、本当のところは知りません(笑)。

連想配列参照プログラム

では、Perl/CGIプログラムで環境変数を参照してみましょう。

#!/usr/bin/perl

print "Content-type: text/html\n\n";
print "<html>\n";
print "<head>\n";
print "<meta http-equiv=\"content-type\" content=\"text/html; charset=shift_jis\">\n";
print "<title>ENV Check CGI</title>\n";
print "</head>\n";
print "<body>\n";
print "<div align=\"center\">\n";
print "<h1>ENV List</h1>\n";
print "<table border=\"2\" cellspacing=\"5\" cellpadding=\"5\">\n";

foreach $key (sort keys %ENV) {
print "<tr valign=\"top\" align=\"left\">\n";
print "<td><nobr>\$ENV{$key}</nobr></td>\n";
print "<td>$ENV{$key}</td>\n";
print "</tr>\n";
}

print "</table>\n";
print "</div>\n";
print "</body>\n";
print "</html>\n";
exit;

プログラム解説

それではこのPerl/CGIプログラムについて解説していきます。

プログラムの概要

このPerl/CGIプログラムを実行すると、使用可能な環境変数名とその中身をすべて一覧表示します。

実行するインターネットサーバーによって使用できる環境変数は変わってきますから、当然、表示される項目も微妙に変わります。

それに、環境変数名としては存在しているが、中身が未定義だったために表示されないものもあるので注意しましょう。

プログラムの流れ

冒頭で動作パターンについてお話したので、このPerl/CGIプログラムの流れについても解説しておきますね。

このPerl/CGIプログラムは、直線的動きとループ的動きを組み合わせただけのものです。

まずは、直線的動きでHTMLページの表宣言までを出力します。

続いて、定義されている環境変数の数だけループ的動きをします。

最後に直線的動きで残りのHTMLページ部分のタグを出力してプログラム終了です。

print関数

今回のPerl/CGIプログラムでは、print関数でHTMLタグも出力させてみました。

当然、ウェブサーバーに設置したPerl/CGIファイルの動作結果を確認するには、インターネットエクスプローラなどのウェブブラウザを使いますよね。

そうなると、実行結果をHTML形式で表示させることが当たり前になってくるので、慣れておくこともかねて今回はこのような出力方法を使ってみました。

それに実際に実行していただけるとわかりますが、環境変数は数が多いので、表形式にしてまとめた方が見やすいです。

print関数の「\」の役割についてもいいですよね。

print関数の「\」とは、その直後の文字をそのまま出力してしまうと都合が悪くなるので、そのポイントを指示する意味で使います。

「\n」は改行を表します。

「\"」は「"」を、「\$」は「$」出力を表しています。

「"」は、print関数宣言直後に使われています。

ですから、再び「"」が登場すると、出力文字列終了だという意味になるので、「\」を直前に付加して、純粋に「"」文字を出力したいことを表現しています。

「$」というのは、変数の頭に付く文字として扱われていますよね。

さらに今回は、print関数の出力部分を「"」ではさんでいますから、「$」に続く文字列を変数名だと解釈し、その中身を表示しようとするわけです。

純粋に変数の中身を表示したいのならこれでよいのですが…。

今回は、変数名そのものを表示させたいので、「\」を直前に付加して「$」を特別の意味を持たないただの文字として扱わせています。

foreach関数

foreach関数を使って、環境変数のキーを順に取り出しています。

さらに、ループ条件は「foreach $key (sort keys %ENV)」になっていますから、環境変数のキーをアルファベット順で取り出しています。

環境変数は連想配列になっていて、キーはスカラ変数「$key」に代入されていますから…。

「$ENV{$key}」とすれば、「$key」に代入されている文字列をキーとする連想配列を呼び出すことができます。

以上のことがわかれば、このPerl/CGIプログラムについては理解できると思います。

環境変数の解説

環境変数はPerl/CGIプログラムを設置するサーバーによって微妙に変わってきます。

常にすべての環境変数が使えるとは限りませんが、ある程度共通して使えるものの中から、知っておいてほしいものをピックアップして解説します。

$ENV{REQUEST_METHOD}

環境変数$ENV{REQUEST_METHOD}とは、Perl/CGIプログラムファイルにアクセスする際のデータ送信方式を定義した値が格納されています。

ウェブブラウザからPerl/CGIプログラムファイルにアクセスする方法には、大きく分けて2種類の方法があります。

ひとつは、Perl/CGIプログラムファイルまでのURLのみでアクセスする方法です。

もうひとつは、指定した値やユーザーが入力したデータなどのパラメータを付加してアクセスする方法です。

そしてこのパラメータを付加してアクセスする方法にはいくつかの種類があり、その種類を定義する値がこの環境変数には格納されています。

おもに「GET」または「POST」という値が格納されます。

「GET」と「POST」の明確な使い分けは決められていませんが…。

「http://~/script.cgi?abc」などのように、「?」の後にパラメータが直接付加されている場合はGET送信。

ウェブページの入力フォームから何らかのデータを入力し、送信ボタンなどを押してPerl/CGIに送信する場合はPOST形式が採用されます。

詳しく書いていくときりがないので、このあたりはまた別の機会に解説していきますね。

$ENV{CONTENT_LENGTH}

環境変数$ENV{CONTENT_LENGTH}とは、入力データの長さを格納した変数です。

Perl/CGIプログラムにわたされたデータが何バイトなのかを知ることができます。

$ENV{QUERY_STRING}

環境変数$ENV{QUERY_STRING}とは、GET送信時にURLエンコードされた文字列が格納された変数です。

URLエンコードとは一言で言うと、データがある一定の規則に従って符号化されることを言います。

例えば…

「こんにちは」

であれば、

「%e3%81%93%e3%82%93%e3%81%ab%e3%81%a1%e3%81%af」

といった形に符号化されます。

ウェブページの入力フォームからCGIなどにデータが送信されるときには、このエンコードというデータ加工処理が行われてから送信処理が行われます。

URLエンコードについてもっと詳しく知りたい場合には、こちらのページ を参照してください。

ちなみに、エンコードされたデータを元の文字列に戻すことを、デコードと言います。

$ENV{CONTENT_TYPE}

環境変数$ENV{CONTENT_TYPE}とは、入力データのMIMEタイプが格納された変数です。

MIMEタイプとは、ファイルの種類を表した文字列のことです。

インターネットの世界では、各ファイルの種類を判別する要素として拡張子とMIMEタイプという、2種類の判断基準が存在しています。

拡張子とは、ファイル名の末尾に付加される「.」以降の文字列のことです。

Perl/CGIプログラムファイルでは「.cgi」、ウェブページなら「.html」などといった具合です。

拡張子は主に、パソコン内にある各ファイルの種類を判断するときに利用されます。

パソコン購入時の状態では、この拡張子が表示されない設定になっているので、拡張子を表示する設定に変更しておくことをおすすめします。

拡張子がなんであるかがわかったところで、MIMEタイプの話に戻ります。

MIMEタイプもファイルの種類を表した文字列ですが、こちらは主に、インターネット上で使用されています。

MIMEタイプのフォーマットは「タイプ名/サブタイプ名」という形式です。

そして、インターネットサーバーとウェブブラウザの間はこのMIMEタイプを用いてデータの形式を指定しあっています。

例えばMIMEタイプには以下のようなものがあります。

テキストファイルでは拡張子「.txt」に対し、MIMEタイプは「text/plain」。

HTMLファイルでは拡張子「.htm」または「.html」に対し、MIMEタイプは「text/html」。

XMLファイルでは拡張子「.xml」に対し、MIMEタイプは「text/xml」。

JavaScriptファイルでは拡張子「.js」に対し、MIMEタイプは「text/javascript」。

CSSファイルでは拡張子「.css」に対し、MIMEタイプは「text/css」。

GIF画像ファイルでは拡張子「.gif」に対し、MIMEタイプは「image/gif」。

JPEG画像ファイルでは拡張子「.jpg」または「.jpeg」に対し、MIMEタイプは「image/jpeg」。

PNG画像ファイルでは拡張子「.png」に対し、MIMEタイプは「image/png」。

まだまだたくさんありますが、全部書くのは不可能なので、このくらいにしておきます(苦笑)。

もっと たくさんのMIMEタイプを見たい場合にはこちらのページ が参考になります。

そしてこれらMIMEタイプを見て、何か気付きませんでしたか?

じらしても無意味なので、答えを言ってしまうと…。

それは、今まで登場しましたPerl/CGIプログラムにも、しっかりMIMEタイプが宣言されているということです。

例えば前述のPerl/CGIプログラムでは、HTMLデータ出力のまえに…。

「print "Content-type: text/html\n\n";」と、インターネットサーバーのPerl/CGIからウェブブラウザに、出力するデータ形式を宣言しています。

これは以前解説していますから、読み返すとさらに理解が深まると思います。

最後に、MIMEタイプが実際にインターネット上でやりとりされるイメージを書いておきます。

まず、ウェブブラウザが「abc.gif」というファイルをインターネットサーバーに要求したとします。

すると、インターネットサーバーは「abc.gif」のデータを、「これはimage/gifタイプのデータです」と言いながら送ってくれます。

このようなやりとりにより、ウェブブラウザは受け取ったデータを正常に処理することができるのです。

しかしウェブブラウザによっては、このMIMEタイプの情報を無視して拡張子の方を信用したり。

そうかと思えば、MIMEタイプや拡張子を無視してファイルの中身を見て勝手に判断するものなどいろいろなタイプがあるようです。

長くなりましたが、MIMEタイプの解説は以上です。

$ENV{REMOTE_ADDR}

環境変数$ENV{REMOTE_ADDR}とは、アクセスしてきたユーザーのIPアドレスが格納されている変数です。

IPアドレスとはわかりやすく言うと、インターネットに接続しているコンピューターに割り当てられている固有の番号のことです。

掲示板やウェブログに書き込んだ際、このIPアドレスも一緒に記録されます。

そして、芳しくない書き込みなどをされた場合には、IPアドレスをブラックリストに入れ、今後書き込みできないようにするなど個人を特定する手段として使われます。

表示例「202.229.139.80」。

$ENV{REMOTE_USER}

環境変数$ENV{REMOTE_USER}とは、BASIC認証(アクセス制限)を実施した場合にのみ、ユーザー名が格納される変数です。

basic認証とは、主にUNIXサーバーで実装されるアクセス制限で、ユーザー名とパスワードを使ってウェブページの閲覧制限をかける方法です。

手軽に設置できますから、また別の機会にでもやり方を解説しますね。

$ENV{SERVER_SOFTWARE}

環境変数$ENV{SERVER_SOFTWARE}とは、Webサーバのソフトウェア名とバージョンが格納されている変数です。

表示例「Apache/1.3.6 (Unix)」。

$ENV{SERVER_PROTOCOL}

環境変数$ENV{SERVER_PROTOCOL}とは、HTTPプロトコルのバージョンが格納されている変数です。

表示例「HTTP/1.1」。

$ENV{GATEWAY_INTERFACE}

環境変数$ENV{GATEWAY_INTERFACE}とは、Webサーバが実行しているCGIのバージョンが格納されている変数です。

表示例「CGI/1.1」。

$ENV{HTTP_ACCEPT}

環境変数$ENV{HTTP_ACCEPT}とは、ウェブブラウザが理解できるMIMEタイプを格納した変数です。

MIMEタイプについてはもういいですよね。

表示例「HTTP_ACCEPT: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, ~」。

$ENV{HTTP_ACCEPT_CHARSET}

環境変数$ENV{HTTP_ACCEPT_CHARSET}とは、ウェブブラウザが理解できる文字コードセットが格納されている変数です。

表示例「Shift_JIS,*,utf-8」。

$ENV{HTTP_ACCEPT_LANGUAGE}

環境変数$ENV{HTTP_ACCEPT_LANGUAGE}とは、ウェブブラウザに設定されている各国語が格納されている変数です。

表示例「ja,fr;q=0.7,de;q=0.3」。

$ENV{HTTP_USER_AGENT}

環境変数$ENV{HTTP_USER_AGENT}とは、アクセスしてきた端末名が格納されている変数です。

パソコンであればオペレーティングシステムとウェブブラウザの種類とバージョン、携帯電話であれば機種や会社、ゲーム機であれば端末名などがわかります。

「Windows XP」プラス「Internet Explorer」では、以下のような文字列が格納されます。

「Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.0.3705; .NET CLR 1.1.4322)」。

$ENV{HTTP_REFERER}

環境変数$ENV{HTTP_REFERER}とは、アクセス元のURLが格納されている変数です。

ちなみに、ウェブブラウザのアドレスバーに直接URLを入力した場合や、お気に入りメニューからアクセスしてきた場合は、変数内には何も格納されません。

$ENV{SERVER_ADMIN}

環境変数$ENV{SERVER_ADMIN}とは、インターネットサーバーの管理者情報を格納する変数です。

管理者情報とはどのようなものかに関しては、インターネットサーバーの設定内容によって異なります。

ちなみに私が所有しているインターネットサーバーでは、メールアドレスが設定されています。

$ENV{SERVER_PORT}

環境変数$ENV{SERVER_PORT}とは、アクセスしたときに使ったTCPポート番号が格納されている変数です。

表示例「80」。

$ENV{HTTPS}

環境変数$ENV{HTTPS}とは、SSL暗号化通信がオンになっているかどうかを表した変数です。

インターネットサーバーへの接続が、SSL暗号化通信で行われていれば「on」が格納されます。

$ENV{REMOTE_HOST}

環境変数$ENV{REMOTE_HOST}とは、どのインターネットサーバーを経由してアクセスしているかという情報を格納しています。

主にインターネット接続契約をしているプロバイダのコンピューター名が格納されています。

その他の環境変数

以下の環境変数は、ドメイン名やPerl/CGIプログラムファイルまでのパスを表したものです。

$ENV{PATH_INFO}
$ENV{PATH_TRANSLATED}
$ENV{SCRIPT_NAME}
$ENV{DOCUMENT_ROOT}
$ENV{HTTP_HOST}
$ENV{SERVER_NAME}

以上、環境変数についてザッと解説してきましたが、インターネットサーバー環境によっては、使えないものも出てくるので注意しましょう。

調べていけばもっとたくさんの環境変数が出てくると思いますが、だいたいこのぐらい知っておけば問題ありません。

これで今回の学習テーマである、Perl/CGIプログラムの環境変数については以上です。



編集後記

今回の後半部分は、環境変数の羅列になってしまいましたね。

さぞ、かったるかったかと思います。

まぁでも環境変数にはこんなのもあるんだということを、なんとなくでも知っておいてほしかったので、たくさん掲載しておきました。

Perl/CGIプログラミングにおいて、環境変数をすべて知っていてもそんなに役には立ちませんが、なんとなくでも知っておくことは大切ですからね。

さて、これで終わってしまってはつまらないので、最後に、悪用厳禁の環境変数使用方法についてお話します。

たまにワンクリック詐欺っぽい携帯サイトがありますよね。

クリックするとなんだか怪しいページに飛んで、今使っている携帯機種や契約会社、IPアドレスなどが表示されて、身に覚えのない金額が請求されるという古典的詐欺です。

もうおわかりですよね。

このような詐欺ページというのは、単純に環境変数からの情報を集めて表示させているだけなので、アクセスしてきた人の住所や氏名といった情報というのは一切わかっていません。

具体的には…。

$ENV{HTTP_USER_AGENT}で端末情報を取得し、携帯電話の機種から携帯電話会社を特定。

$ENV{REMOTE_HOST}で、インターネット接続に使っているサーバーを特定。

$ENV{REMOTE_ADDR}で、あなたのIPアドレスを表示して不安をあおる。

これだけではまだパンチが足りないので、もう少し付け加えると…。

例えば、もし支払いに応じないと、「携帯電話会社やあなたが登録しているサイトなどからあなた個人を特定しますよ」などと、ウソの話を持ってくるわけです。

こんなことをされてしまうとインターネット初心者や、からくりがよくわかっていない人などは、不安になってしまうわけです。

絶対に悪用厳禁ですよ(笑)。

と、まぁこんな感じで使えば危険な武器となる環境変数ですが、上手に使えばとてもよいプログラムを作ることができます。

環境変数からもたらされる情報を生かしたプログラムとして有名なのが、アクセス解析や掲示板ですね。

アクセス解析はいろんな角度から、ホームページにアクセスしてきた端末情報を収集し、アクセスログという形でひたすら記録します。

そして集めたデータを集計し、管理者が分析しやすい形で提示するプログラムです。

掲示板では、書き込んだすべてのユーザーのIPアドレスを記録しておきます。

そしてもし、悪意のある書き込みなどに対しては、今後そのユーザーはその掲示板に書き込み禁止とすることができます。

IPアドレスをてがかりにすれば、確実とまではいかないまでも有効な対策となりえます。

このように環境変数はその使い方によって、良くも悪くもなりますから、そのことを覚えておきましょう。

今回の学習は以上です。

ありがとうございました。

<戻る>