WEB相談室

Webページ作成に関しての何でも掲示板です。

タイトル:Perl+SSIのアクセスカウンタ

0:[投稿] manet [URL] [2003/04/29 11:04 ][環境:WinXP,IE6 Perl]

Perlでアクセスカウンタのプログラムを組んでローカルで動作確認中ですがうまくいきません。↓のようにファイルを作成しました。

カウンタプログラム:count2.cgi
ロック用サブルーチン:lock.pl
日時取得サブルーチン:sub_gettime.pl
カウンタ表示用HTML:count.shtml
カウンタファイル:count.log
アクセスファイル:access.log
カウンタ画像:0.gif〜9.gif(./imgディレクトリに格納)

コマンドプロンプトでcount2.cgiを実行しようとすると
Can't locate sub_gettime.pl at count2.cgi in line 3.
と出てきます。
でも、sub_gettime.plは、同じディレクトリにちゃんと作ってますし、sub_gettime.plを実行するとエラーは出てきません。

count2.cgiのソースは↓です。

#!c:/perl/bin/perl

require "./sub_gettime.pl";
require "./lock.pl";

$countfile="./count.log";

$lockdir="./lockdir";    #lockDirectry
$accessfile="./access.log";        #訪問者情報を格納するファイル

#***get lock
exit unless(&lock($lockdir));

#####今日始めての訪問者かどうか確認
($yyyymmdd, $youbi, $hhmmss )=&gettime();    #日時取得
$addr=$ENV{'REMOTE_ADDR'};                    #IP address
$refer= $ENV{'HTTP_REFERER'};                #前のURL
$host=$ENV{'REMOTE_HOST'};                    #HOST Name

#アクセスファイルをオープン+読み込み
open(ACCESSFILE,"+<$accessfile");
@accesslog=<ACCESSFILE>;

#今日始めての訪問者かを判定する(同一日に同一のIPアドレスか?)
$match=0;
foreach(@accesslog)
{
    if(/yyyymmdd/)
    {
        if(/$addr/)
        {
            $match=1;
        }
    }
}

if($match==0)
{
    #今日始めての訪問者の場合

    #カウンタ値を読み込み1加算して格納する
    open(COUNTFILE,"$countfile");
    chomb($count=<COUNTFILE>);
    $count++;
    seek(COUNTFILE,0,0);
    print COUNTFIOE "$count\n";
    truncate( COUNTFILE, tell(COUNTFILE));
    close(COUNTFILE);

    #アクセスファイルに訪問者情報を格納
    unshift(@accesslog,"$yyyymmdd$youbi$hhmmss\t$refer\t$host\n");
    seek(ACCESSFILE,0,0);
    print ACCESSFILE @accesslog;
    truncate(ACCESSFILE,tell(ACCESSFILE));
}
else
{
    #今日始めての訪問者ではない場合の処理

    #カウンタ値を読み込む
    open(COUNTFILE,"+<$countfile");
    chomb($count=<COUNTFILE>);
    close(COUNTFILE);
}
#Close accessfile
close(ACCESSFILE);

#carry out unlock
&unlock($lockdir);

#カウンタGIFを表示するタグ
$count_img=sprintf("%04d",$count);
$count_img=~s/(.)/<img src=".\/img\/$1.gif">/g;

#標準出力タグを出力
print "Content-Type:text/html\n\n";
print $count_img;

exit;

sub_gettime.plのソースは↓です。

#==日時取得サブルーチン

sub gettime()
{
    my($yyyymmdd,$youbi,$hhmmss);
    ($sec,$min,$hour,$day,$mon,$year,$wday)=localtime(time);
    $yyyymmdd=sprintf("%04d/%02d/%02d",$year+1900,$mon,$day);

    $youbi=sprintf("(%s)",("日","月","火","水","木","金","土")[$wday]);
    $hhmmss=sprintf("(%s)","%02d:%02d:%02d",$hour,$min,$sec);

    return $yyyymmdd, $youbi,$hhmmss;
}

#End subroutuin
1    

なにがいけないのでしょうか?

回答(必須): 状態:

お名前(必須):

e-mail:

URL:




[戻る]

ChaichanPAPA's World