%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /home/rappan/www/_cgi_cnt/
Upload File :
Create Path :
Current File : /home/rappan/www/_cgi_cnt/oneday.cgi

#!/usr/bin/perl

#===================================================================================================
# らくらく日計カウンタv1.0 (2002/11/23)
#
# Copyright(C) 2002 Mura's…
# http://www1.harenet.ne.jp/~a-mura/
#  
# 本プログラムはフリーソフトとして配布していますが
# 著作権は放棄していません。
#
# このソフトを使用することによるいかなる損害も作者は
# 一切責任を負いません。
#
# -----------------------------------------------------------------------
#
# ☆カウンタ設置の方法
#
#   カウンタ表示用CGIプログラム   [ oneday.cgi ]
#   設定ページ表示用CGIプログラム [ dayset.cgi ]
#
#    タグ設定方法
#
#     1.累計カウンタ(設定画面へのリンクを設定しています)
#      <a href="oneday/dayset.cgi" target="_blank">
#      <img src="oneday/oneday.cgi?id=***&mode=total" border="0"></a>
#
#     2.本日のカウンタ
#       <img src="oneday/oneday.cgi?id=***&mode=today">
#
#     3.昨日のカウンタ
#       <img src="oneday/oneday.cgi?id=***&mode=yday">
#
#     oneday.cgiへのファイルパスを指定し、オプションを設定します。
#     idとmodeしていの間は半角の&で区切ってください。
#     (id=***&mode=total)
#
#     ***の部分に半角英数8文字までのIDを必ず指定してください。
#     1つのIDで「トータル・本日・昨日」の3個のカウンタが1セットになります。
#     mode= の部分でカウンタの種類を指定します。
#     mode=total トータルカウント
#     mode=today 本日のカウント
#     mode=yday  昨日のカウント
#
#
#  1.上記のカウンタ表示用タグコードを表示したいページ場所に書き込みます。
#
#   2.このファイルoneday.cgiとdayset.cgiの1行目のPerlへのパスを確認し、必要であれば修正します。
#
#   3.ファイルをサーバーに転送します。
#
#   4.パーミッションの設定をします。
#
#   ☆パーミッション設定
#    public_html / index.html(ホームページディレクトリ)
#
#                / oneday(755) - oneday.cgi(755)
#                              - dayset.cgi(755)
#                              - param.cgi(644)
#                              - gifcat.pl(644)
#                          
#                              / dat(755) - index.html
#
#                              / gif / image1 - 0.gif, 1.gif, … 
#                                    / image2 - 0.gif, 1.gif, …
#                                    / image3 - 0.gif, 1.gif, …
#                                    /   :  4 -      :
#                                    /   :  5 -      :
#
#
#  上記のように設定してページ上でトータルカウンタをクリックすると設定画面が開きます。
#   IDとパスワードを入力して「送信」ボタンを押すとカウンタのIDごとに各種設定ができます。
#
#  ☆設定画面で選択できる画像を追加するには
#    gif フォルダ以下に番号数を増やしたimageフォルダを追加する
#
#    ※例えばimage23フォルダまですでに存在する時、image24フォルダ
#      を作成してそこに画像を格納
#
#===================================================================================================

#-- ライブラリ&設定ファイル読み込み
require './gifcat.pl';
require './param.cgi';

#-- パラメータ読み込み&デコード
&paraDecode;

#-- 例外
if($IN{'id'} eq '' || $IN{'mode'} eq ''){exit;}

#-- ファイルロック
if($IN{'mode'} eq 'total' || $IN{'mode'} eq 'today'){
    &lock;
}

#-- 設定ファイル読み込み
if(&readSetup($IN{'id'}) eq 'NG'){
    if($IN{'mode'} eq 'total' || $IN{'mode'} eq 'today'){&unlock;}
    exit;
}

#-- 過去ファイル削除
for($i=0; $i<$delete; $i++){
    my($expath) = getPath('true', $i+2, $IN{'id'});
    unlink($expath);
    
    $expath = getPath('false', $i+2, $IN{'id'});
    unlink($expath);
}

#-- IPチェック&カウント取得表示
if($IN{'mode'} eq 'total'){

    if($termflg != 0){ # IPチェックON
        if(&ipCheck(getPath('true', 0, $IN{'id'})) eq 'true'){
            $nowcount = &countUp("$basepath$IN{'id'}cnt\.cgi", 'true');
            &countUp(getPath('false', 0, $IN{'id'}), 'true');
        }else{
            $nowcount = &countUp("$basepath$IN{'id'}cnt\.cgi", 'false');
        }
    }else{             # IPチェックOFF
        $nowcount = &countUp("$basepath$IN{'id'}cnt\.cgi", 'true');
    }

    if($nowcount eq ''){&unlock; exit;}
    #-- カウント整形
    $digit = sprintf("%0${totalfigure}d", $nowcount);
    #-- ロック解除
    &unlock;
    #-- 出力
    &showImage($digit, $totalfigure, $totalimg);

}elsif($IN{'mode'} eq 'today'){

    if($termflg != 0){ # IPチェックON
        if(&ipCheck(getPath('true', 0, $IN{'id'})) eq 'true'){
            $nowcount = &countUp(getPath('false', 0, $IN{'id'}), 'true');
            &countUp("$basepath$IN{'id'}cnt\.cgi", 'true');
        }else{
            $nowcount = &countUp(getPath('false', 0, $IN{'id'}), 'false');
        }
    }else{             # IPチェックOFF
        $nowcount = &countUp(getPath('false', 0, $IN{'id'}), 'true');
    }

    if($nowcount eq ''){&unlock; exit;}
    #-- カウント整形
    $digit = sprintf("%0${todayfigure}d", $nowcount);
    #-- ロック解除
    &unlock;
    #-- 出力
    &showImage($digit, $todayfigure, $todayimg);

}else{
    $nowcount = &countUp(getPath('false', 1, $IN{'id'}), 'false');
    if($nowcount eq ''){exit;}
    #-- カウント整形
    $digit = sprintf("%0${ydayfigure}d", $nowcount);
    #-- 出力
    &showImage($digit, $ydayfigure, $ydayimg);
}


#======================#
#  パラメータ読み込み
#======================#
sub paraDecode {
    my($pair,$name,$value);
    foreach $pair(split(/&/, $ENV{'QUERY_STRING'})){
        ($name, $value) = split(/=/, $pair);
        #-- 文字のデコード
        $value =~ tr/+/ /;
        $value =~ s/%([0-9a-fA-F][0-9a-fA-F])/chr(hex($1))/eg;
        $IN{$name} = $value;
    }
}

#===================#
#      GIF出力
#===================#
sub showImage {
    my(@num) = ();
    my($chip);
    
    for(my($i)=0; $i<$_[1]; $i++){
        $chip = substr($_[0], $i, 1);
        push(@num, "$_[2]$chip\.gif");
    }

    print "Content-type: image/gif\n\n";
    binmode(STDOUT);
    print &gifcat'gifcat(@num);
    exit;
}

#===========================#
#  IPアドレスチェック&更新
#===========================#
sub ipCheck {
    my($time) = time;

    if((-e $_[0])){
        open(FILE, "+< $_[0]") or return 'false';
        my(@data) = <FILE>;
        my($res) = 'true';
        my($exflg) = 0;
        my(@para);
        seek(FILE, 0, 0);
        truncate(FILE, 0);

        foreach(@data){
            $_ =~ s/\r//;
            $_ =~ s/\n//;
            @para = split(/\,/, $_);
            $para[1] =~ s/\D//g;
            if($ENV{'REMOTE_ADDR'} eq $para[0]){
                $exflg = 1;
                if(($termtime*60) < ($time-$para[1])){
                    print FILE "$para[0],$time\n";
                }else{
                    $para[1] += 7;
                    print FILE "$para[0],$para[1]\n";
                    $res = 'false';
                }
                next;
            }
            if(($termtime*60) < ($time-$para[1])){next;}
            print FILE "$_\n";
        }

        if($exflg == 0){print FILE "$ENV{'REMOTE_ADDR'},$time\n";}
        close(FILE);
        return $res;

    }else{
        open(FILE, "> $_[0]") or return 'false';
        print FILE "$ENV{'REMOTE_ADDR'},$time\n";
        close(FILE);
        chmod(0666, $_[0]);
        return 'true';
    }
}

Zerion Mini Shell 1.0