カウンターをつくろう! - データの保存

トップ > プログラミング研究 > カウンターをつくろう
一つ前にもどる 目次にもどる 次のページへ

カウンターをつくろう! - データの保存

カウンターの動く仕組み(アルゴリズム)

ホームページを作っていて、やはり最初に気になるのが、毎日どれくらいの人がきてくれているか、ということだと思います。そこで大抵の人がカウンターをつけているわけですが、このカウンターもWebプログラムを使わないと実現できない機能の一つです。

CGI用Perlプログラムを配布しているサイトでも、様々なカウンターのプログラムがありますが、基本的な仕組みは至って簡単です。プログラムの動く流れを示してみました。

1.CGI起動
2.現在のカウント数の読み込み(別のファイルから)
3.現在のカウントに1を追加
4.追加されたカウント情報をファイルに保存
5.カウント情報をHTMLで表示

この「5.カウント情報をHTMLで表示」という部分がテキストになっていたり、画像になっていたりするわけで、基本的な構造は「ほぼ」同じはずです。

では、早速一番簡単なカウンタープログラムを書いてみましょう。

01: #!/usr/local/bin/perl
02:
03: # count.datというファイルから現在のカウント数を読み込む
04: open (IN, "count.dat");
05: $count=<IN>;
06: close(IN);
07:
08: # 現在のカウント数$countに1を追加
09: $count=$count+1;
10:
11: # 1増加したカウントを保存
12: open (OUT, ">count.dat");
13: print OUT $count;
14: close(OUT);
15:
16: # ここからHTMLでの表示
17: print "Content-Type: text/html\n\n";
18: print "<html><head><title>test</title></head>";
19: print "<body>";
20: print "あなたは $count 番目の訪問者です。";
21: print "</body></html>";
22:
23: __END__

*左端の番号は便宜的に付けた行番号です。

これを count.cgi というファイルに保存します。また、空っぽのテキストファイル count.dat を作って同じフォルダに保存します。

これで、count.cgi が起動されるたびに、ブラウザには「あなたは 12 番目の訪問者です。」というような数字が表示されます。あまりの簡単さにビックリでしょ?

プログラムの解説

早速、いつものように解説をしようと思います。

これはもう説明不要ですね。サーバーのPerlプログラム本体までのパスですね。

01: #!/usr/local/bin/perl

最初にすることは、カウンターの数字が記録されているファイルを開くことです。現在のカウンターの数がいくつなのかは、ファイル「count.dat」を別に作成してそこに記録しておく必要があるのです。

03: # count.datというファイルから現在のカウント数を読み込む
04: open (IN, "count.dat");
05: $count=<IN>;
06: close(IN);

4行目の「open ( IN , "count.dat");」というのは、別のファイル「 count.dat」を開いてデータを取り込む命令です。このデータを、「ファイルハンドル」と呼ばれる特別な変数に関連付けるのがこの命令なのです。こうすることで、 count.dat にあるデータを IN という名前で扱うことができるようになります。

ちょっと説明がややこしいですね。あえて書くなら、count.dat の全てのデータを IN という変数に入れたと思ってもらっても間違いないと思います。また、このファイルハンドルは何でもかまいません。ここでは入力するということで、IN というのを使ってますが、COUNT とか DATA とか判りやすければなんでもOKです。

ちなみに、最初にも書きましたが、「count.dat」というのは現在のカウント数だけが入った1行だけのファイルです。

03: # count.datというファイルから現在のカウント数を読み込む
04: open (IN, "count.dat");
05: $count=<IN>;
06: close(IN);

先ほどのIN を「$count=<IN>;」というように、プログラムの中で自由に計算できるように $count という変数に代入します。そして、最後に「close(IN);」で開いたファイルを閉じます。

次にすることは、ひとつだけですよね。今取り出した現在のカウント数 $countに 1 を足すだけです。それが次の行の処理になりますね。

08: # 現在のカウント数$countに1を追加
09: $count=$count+1;

これは $count++; と書いてもOKですよね。
これで、自分が訪問した回数も含めた現在のカウント数の計算ができました。後は、これを表示するだけなのですが、、、その前にその現在のカウント数を保存しておく必要があります。じゃないとカウンターの数は増えていきません(^^; それが次の行の処理です。

11: # 1増加したカウントを保存
12: open (OUT, ">count.dat");
13: print OUT $count;
14: close(OUT);

さっきと同じように open(); を使ってファイルにデータの保存をするのですが、ちょっと違うことがあります。ファイル名の指定の前に「>」がついていますよね。

これは、この open 命令が書き込みモード(上書き)で開いているということを示しています。あと、わかりやすくするためにハンドルを OUT としてみました。でも、当然 IN を使っても動きます。

さっきは open (IN); で取り込んだデータを「$count = <IN>;」というように取り込んだのですが、こんどはファイルへの書き出しです。 これはおなじみの print 命令を使います。

11: # 1増加したカウントを保存
12: open (OUT, ">count.dat");
13: print OUT $count;
14: close(OUT);

OUTというハンドルに対して $count を書き込みなさい!というのが 「print OUT $count;」 の意味です。これで、count.dat$count の内容が書き込みされました。 最後に、open したファイルを close して書き込み処理の終了です。

そして、この $count をHTML上に表示させれば、普段見ているカウンターの出来上がり、ということになります。

17: print "Content-Type: text/html\n\n";
18: print "<html><head><title>test</title></head>";
19: print "<body>";
20: print "あなたは $count 番目の訪問者です。";
21: print "</body></html>";

上の例で言えば、20行目の文でカウンターの表示ということになります。

今回のカウンターのサンプルプログラム

サンプルがありますので、こちらからどうぞ。(別窓)

一つ前にもどる 目次にもどる 次のページへ
(作成2003/06/16 by あいまい)

トップ > プログラミング研究 > カウンターをつくろう

日時: 2008年01月24日 19:51
newsingに投稿BuzzurlにブックマークBuzzurlにブックマークlivedoorクリップに投稿 Choixにブックマーク イザ!ブックマーク このエントリーを含むはてなブックマーク
トップに戻る
このエントリーの所属カテゴリ: プログラミング研究
このエントリーのタイトル:カウンターをつくろう! - データの保存



copyright © 2000-2008 all rights reserved
あいまいモード・コム - rss2.0 atom
newsingに投稿BuzzurlにブックマークBuzzurlにブックマークlivedoorクリップに投稿 Choixにブックマーク イザ!ブックマーク このエントリーを含むはてなブックマーク