[もくじへトップページへ前ページへ次ページへ]

Sunday, 07-Jan-2001 01:21:45 JST に更新

                                   
 11.アクセスカウンタ

 カウンタは自作しなくても、ほとんどのプロバイダで既製品がサービスされて

 います。しかし、誰がいつ訪問してきたかのログをとったり、自分の好みに合

 ったカウンタとなると既製品では物足りません。そこで、今回はカウンタを作

 ってみました。



 カウンタのプログラムは、掲示板などのようにリンクをクリックしてから起動

 するのではなく、ページが表示されると同時に起動されなければなりません。

 SSIでは、それが簡単に作れますが、SSIはセキュリティー等の関係から

 使用できないプロバイダも多いのです。それでCGIカウンタということにな

 ります。



 講義用として、テキスト表示とGIF画像表示のカウンタを作成してみました

 が、テキストの方は問題点がいくつかありますので、GIF画像表示の方を紹

 介します。



 まずは、完成品をご覧ください。


   
良寛のカウンタ



 2回クリックしてもカウントされないでしょう?このカウンタは、同じ人の訪

 問は1日1回しかカウントされないのです。





  • プログラム

 次のようなプログラム(counter.cgi)を作成しました。コメントを入れてあり

 ますので、スクロールボタンを操作しながら解読してください。

 





 プログラムの流れは、概略次のようになります。


メイン

    ------------------------------------------------------------
     開始

     掲示板のリンク部分をクリックすると、このプログラムが実行
     されます。先頭行にはPerlへのパスを書きます。
     先頭行の「#」はコメントにはなりません。
    ------------------------------------------------------------

              ↓

    ------------------------------------------------------------
     画像連結プログラム(gifcat.pl)を取り込む
    ------------------------------------------------------------

              ↓

    ------------------------------------------------------------
     変数の初期設定
    ------------------------------------------------------------

              ↓

    ------------------------------------------------------------
     訪問日の取得
    ------------------------------------------------------------

              ↓

    ------------------------------------------------------------
     ロックファイル

     同時アクセスがあると、そのままではデータが破壊されるので
     ダミーのファイルを作成し、そのファイルが存在するときは、
     他からのアクセスを禁止するようにします。
     もちろん、データの書き込みが終わればロックファイルは削除
     することになります。
    ------------------------------------------------------------

              ↓

    ------------------------------------------------------------
     カウントデータの読み込み
    ------------------------------------------------------------

              ↓

    ------------------------------------------------------------
     日付が変わったときカウントログを初期化する
    ------------------------------------------------------------

              ↓

    ------------------------------------------------------------
     訪問者のアドレスを取得
    ------------------------------------------------------------

              ↓

    ------------------------------------------------------------
     訪問者のチェック(2回以上のアクセスかどうか)
    ------------------------------------------------------------

              ↓

    ------------------------------------------------------------
     本日初訪問の場合の処理
     
     カウンタを1増やし、アドレスといっしょに書き込みます。
    ------------------------------------------------------------

              ↓

    ------------------------------------------------------------
     ロックの解除

     ロックファイルを削除(unlink)します。
    ------------------------------------------------------------

              ↓

    ------------------------------------------------------------
     カウンタ表示

     
とほほさんの画像連結表示プログラムを使用しています。
    ------------------------------------------------------------

              ↓

    ------------------------------------------------------------
     終了
    ------------------------------------------------------------




サブルーチン &lock

    ------------------------------------------------------------
     同時アクセスのチェック

     ロックをかけるにはロックファイルを作ります。ロックファイ
     ルと言っても、単なる空っぽのファイルです。
     ロックファイルが存在するかどうかは、if (-e $lockfile){〜
     で調べることができます。
     ロックファイルが既に存在すれば、フラグ$flagが0のままで、
     10回トライします。それでもロックされたままだったら、あ
     きらめて$flag=0のままで元に帰ります。
     存在しなければ、ロックファイルを作成し$flag=1として元に帰
     ります。
    ------------------------------------------------------------



サブルーチン &error

    ------------------------------------------------------------
     ロックファイルが存在すれば、削除して終了します。
    ------------------------------------------------------------





 プログラムを自分でカスタマイズして使う場合は、次をクリックして表示させ

 counter.txtはcounter.cgi、gifcat.txtはgifcat.pl という名前で保存してく

 ださい。( )内はパーミッションです。

   counter.txt   → counter.cgi755

   gifcat.txt    → gifcat.pl644)※とほほさん開発

   count.dat666) メモ帳などで半角数字0を書き込んだファイル

 必ずテキストモード(アスキーモード)でアップロードしてください。



 この他に数字の画像ファイルが必要です。とほほさんのHPにもあります。

 画像はバイナリモードでアップロードしてください。

 また、カウンタ用の専用フォルダを作る場合は、パーミッションは777にし

 てください。



 カウンタを設置するページに、

 <img src="http://・・・/~・・/cgi-bin/counter.cgi">

 などとして、リンクします。



 ちょっと改造すれば、1日分のアクセスログをメールで送ることもできるはず

 です。改良版ができたら教えてください。リンクさせていただきます。



  動かないときは、サポート掲示板へどうぞ。


ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

[もくじへトップページへ前ページへ次ページへ]