中井技術工房 CGI アプローチ トップ > CGIアプローチ > ここ

アクセスカウンタ例
●仕様



 
●ファイル格納状態


    ----+- www (publc_html)
        |
        +- CountCGI -+- CntTest.htm
                     |
                     +- Counter.cgi
                     |
                     +- CounterD.cgi
                     |
                     +- 0〜9.gif
                     +- no.gif
さくらインターネットでは www というディレクトリがホーム(public_html 相当)になっていますので、その下に CountCGI というディレクトリを作りました。
各ファイルの役割は以下のとおりです。
gif 画像は次のところの下位頁の「フリー素材/アクセスカウンタ」からダウンロードさせていただきました。

 超初心者のホームページ作成(http://beginners.atompro.net/htm_free.html)
 
 

 
●カウンタ 呼び出し html

[ ソース ]

    <HTML lang=ja>
    <!------------------------------------------------------------------->
    <!-                           カウンタテスト                       -->
    <!------------------------------------------------------------------->
    <HEAD>
    <TITLE>中井技術工房/カウンタテスト </TITLE>
    </HEAD>

    <BODY>

    <!-------------------------------------------------------------
      5桁出力する、上位から下位へ処理
      0 出力はカウントアップ処理をし、ダミー画像(空画像)を出力する
    <img を使うとかならずなんらかの画像を出力するため
      6桁目の指定はエラーで、このときもダミー画像を出力する
    --------------------------------------------------------------->
    <img src="CountCGI/Counter.cgi?0">
    <img src="CountCGI/Counter.cgi?1">
    <img src="CountCGI/Counter.cgi?2">
    <img src="CountCGI/Counter.cgi?3">
    <img src="CountCGI/Counter.cgi?4">
    <img src="CountCGI/Counter.cgi?5">

    </BODY>
    </HTML>
 

[ 機能説明 ]

img src 文で、6回読み出して、5桁のカウンタを桁別に表示します。
? のあとの 0〜5 は桁を示す引数で、0 のときはカウンタファイルを読み出してカウントアップし、カウンタファイルを更新し、ダミー画像を表示します。
<img src 文ではなんぞかんぞの画像を頁出力せんと気がすまないようで、ダミー画像(=空画像)を出力するようにしています。

 
●カウンタ CGI

[ ソース ]


#!/usr/bin/perl

#==========================================================================
# CGI カウンタテストプログラム  Dec.28,2014
#==========================================================================

#print "Content-type:text/html\n\n";   # 必要に応じて本文を非コメント文にすること

# imsg〜で呼び出した引数(0〜9) を取り出す
# 桁Sr を指す、0 は特別でカウントアップのみ
$ketasr = @ARGV[0];

# カウンタファイルからカウンタ数字を取り出す
   $cfname = "CounterD.cgi";
   open(FP,"<$cfname");
   $count = <FP>;
   close(FP);

if ($ketasr == 0){ # 0 のときはカウントアップしてダミー画像を出力する
  $count++;   # カウントアップ
              #  カウンタファイルにカウント値(カウントアップ済み)を書き込む
  open(FP,">$cfname");
  print FP "$count";
  close(FP);
    # ダミーの画像(=ほとんど空の画像)を指定する
  $gifname = "no.gif";
  
}else{

  if($ketasr>5){        # 5桁表示なので6以上が指定されるとエラー
    $gifname="no.gif";  # なのでダミーの画像(空画像)を指定する
  }else{
    # 1〜は対応する ?.gif を出力する
    $ketayuko = length($count);  # 格納数字の有効桁数
                             # 5桁表示とするが最初は5桁もカウンタがない
    $ketadummy=5-$ketayuko;  # 上位ダミー桁数=5−有効桁数
    
    if($ketasr <= $ketadummy ){
       $gifname ="0.gif";    # 上位桁用に0表示画像を指定する
    }else{
       # カウンタの指定桁目が有効数字の何桁目かを計算して、1桁分の数字を取り出す
       $su = substr($count, $ketasr-$ketadummy-1, 1);  # 1-最上位桁 2-2桁目の数字
       $gifname = "$su.gif";  # 該当数字の画像を指定する 0〜9.gif
    }
  }
}

#----------------------------------------------------------------------
# カウンタの該当桁数字相当の gif 画像(0〜9.gif) を読み出して頁出力
#----------------------------------------------------------------------
# 画像ファイルを読み出す
  open(FP, $gifname);
  read(FP, $gdat, 10000);   # バイナリで読み出す、バイト数には大きな数字を入れておく
  close(FP);

# 画像ファイルを頁出力
  print $gdat;


[ 機能説明 ]

ソース中のコメントでわかると思うが?


トップ > CGIアプローチ トップ > 頁トップ