アクセスカウンタの作成

アクセスカウンタの作成

処理の流れ

ファイルからデータを読み込んだり、ファイルにデータを書き込んだりする事ができるようになれば、アクセスカウンタを作成することができます。

アクセスカウンタの処理の流れは以下のようになります。

  1. CGIプログラムにアクセスされる。
  2. これまでのアクセス数を保存してあるファイルから、アクセス数を読み出す。
  3. 読み出した数に1を加え、今回のアクセス数として表示する。
  4. 1加えられたアクセス数を、同じファイルに書き込む。

アクセスカウンタの作成

今回はアクセス数をカウントするCGIを counter.cgi、アクセス数を保存するファイルを counter.txt として作成します。counter.cgi の内容は以下のとおりです。

#!/usr/local/bin/perl

print "Content-Type: text/html; charset=Shift_JIS\n\n";
print "<html>\n";
print "<head><title>アクセスカウンタ</title></head>\n";
print "<body>\n";

if (open(FH, "counter.txt")) {
  $count = <FH>;
  close(FH);

  $count++;

  print "<p>あなたは$count人目の訪問者です。</p>\n";

  if (open(FH, ">counter.txt")) {
    print FH $count;
    close(FH);
  } else {
    print "<p>ファイルに書き込めません。</p>";
  }
} else {
  print "<p>ファイルを読み込めません。</p>";
}

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

exit;

また、counter.cgi と同じフォルダの中に counter.txt を作成しておきます。(内容はカラのままで大丈夫です。)

これで準備は完了です。以降で counter.cgi の内容を上から順に解説していきます。まず、

if (open(FH, "counter.txt")) {
  $count = <FH>;
  close(FH);

この部分で counter.txt を開き、内容を $count に読み込んでいます。つまり $count には、これまでのアクセス数が代入されます。

$count++;

この部分で、これまでのアクセス数に1を加えています。$count++; は、$count = $count + 1; と同じ意味です。

print "<p>あなたは$count人目の訪問者です。</p>\n";

この部分で、今回のアクセス数を表示しています。

if (open(FH, ">counter.txt")) {
  print FH $count;
  close(FH);

この部分で、今回のアクセス数を counter.txt に書き込んでいます。前回までのアクセス数は消去され、counter.txt には今回のアクセス数のみ保存されることになります。

これでアクセスカウンタの完成です。counter.cgi に何度もアクセスすると、表示されるアクセス数が増えていきます。