SSIの例として、アクセスカウンタの原理を紹介しておきましょう。C言語を使ったプログラムです。動作の仕組みを把握していただくことが目的なので、C言語の文法やプログラミング技術については割愛します。
- 基本は件数の累計処理 -
アクセスカウンタとは、概念上はWebサイトを訪れた人の数を表示するものですが、実際には、特定のWebページ(多くはトップページ)のアクセス件数(ヒット数)を累計し、その数値を表示する機能となります。
多くの場合、アクセス件数を示す数字にはグラフィックスが使われますが、元になるアクセス件数(それまでにアクセスされた回数)は単なる整数値です。グラフィックスを使ったカウンタの画面は、単にその数値を画像データに置き換えているに過ぎません。この部分の処理についての説明は、ここでは本質的な問題ではないので省略します。
本質的な部分は、アクセス件数を数える処理です。その処理には、多くの場合C言語やPerlなどによるCGIやSSIが使われます。
画面1:画像を使ったアクセスカウンタ
- 累計を記録したファイルを書き換える -
アクセス件数を表示するには、それまでのアクセス件数の累計をファイルに記録しておき、アクセスされるたびに、その値を書き換えていきます。仕組みは、以下のようになっています。
(1) |
Webサーバー側にアクセス件数を記録するファイルを用意する 最初はデータとして“0”が記録されています。 |
(2) |
クライアントのブラウザがWebページにアクセスする |
(3) |
WebページからCGIを通じてプログラムが実行される |
(4) |
プログラムはファイルからデータを読み出し、それに“1”を加えた値を出力する 出力した値が、アクセスしたユーザー(HTMLファイルを読み込んだクライアント)に対する“アクセス件数”となります。 |
(5) |
出力した値をファイルに記録する これが最初のアクセスなら、この時点でファイルに内容は“1”に、36件目のアクセスならファイルの内容は“36”に書き換えられます。 |
画像を使って数値を表示する場合は、上記(4)のところで、出力する数値の各桁の値に対応する画像(0~9までの数値をデザインした画像ファイル)を並べて表示します。
- C言語で書いたプログラム -
上記の原理に基づいた、シンプルなアクセスカウンタのソースコードを紹介しておきます。言語はC言語で、画像を使わず、テキストで件数を表示するだけの仕様です。
アクセス件数を記録するファイルは“count.dat”という名前です。
リスト1:C言語によるアクセスカウンタ(UNIX版)
★印の箇所は、同時アクセスに対するカバーを行っている部分です。Webでは、1つのページが同時に複数のユーザーからアクセスされる場合があります。Webサーバーはアクセスされる都度CGI経由でプログラムを起動するため、同じプログラムが複数起動されます。すると、1つのファイルを複数のプログラムが同時にアクセスしてエラーとなり、正しい件数が記録できなくなります。
そこで、同時アクセスが発生し、ファイルを他のユーザーがオープンしている場合には、それがアクセスできる状態となるまで待機させます。
for( i=0; i<5; i++) {
という行は、VBでは“For i =0 to 5 (Step 1)”と同じ意味で、{ }内の処理を5回繰り返すことを意味します。
UNIXでは、ファイルの実体に対してそれを間接的にアクセスするための“シンボリックリンク”というファイルを利用できます。{ }内では、このシンボリックリンクを新たに作成します。シンボリックリンクの作成は、リンク先であるファイルの実体を他のユーザーがオープンしているとエラーになるため、その場合は“sleep(5)”の箇所で5秒間待って、再度同じ処理を実行します。
それ以降、ファイルを開くことができればデータ(直前のアクセス回数)を読み出し、それに1を加えてファイルに書き込みます。さらに、同じ値を標準出力に送って処理は終了します。
- HTML内で実行を指示する -
上記のプログラムをコンパイルして“count”という名前で保存したとします。このプログラムをWebサーバーに実行させるには、リスト2のようなHTMLファイルを作成します。
クライアントがWebサーバーにアクセスし、このHTMLファイルを読み込む要求を送ると、Webサーバーの側でプログラム“count”が実行されます。実行結果はHTMLデータとしてクライアントに送られ、ブラウザにアクセス件数が表示されます。
この処理はSSIを利用して実行されます。プログラム“count”は、単にアクセス件数を示す数値(数字で構成された文字列)を出力するだけです。
先述したように、SSIではHTMLファイルが読み出されたときにプログラムが実行されます。プログラムの実行結果(アクセス件数)は、HTMLファイル内でSSIによるプログラムの実行を指示している箇所
<!--#exec cmd="./counter"-->
に表示されます。
リスト2:アクセスカウンタのプログラムを実行するHTMLファイル
図6:アクセスカウンタの原理
CGIの基本的な原理と、SSIを利用したアクセスカウンタの仕組みを紹介しました。どちらも、サーバーで実行したプログラムの結果を、HTMLデータとしてクライアントに送信する機能で、サーバーサイド・Webアプリケーションの基本と言えます。
ユーザーからの入力を受け取って処理できるCGIでは、SSI以上に細やかで複雑な処理が作れます。次回は、ユーザーからの入力を処理するCGIの例として、ゲストブックの仕組みを紹介します。
|
|
|