#!/usr/bin/perl require "./gifcat.pl"; #GIFファイル連結ライブラリを導入 #Cookieを使う関係で自サーバーを指定 $base_url = "http://www.winapi-database.com/cgi/counter/logo.pl"; #10日前のログを削除 #localtime はフォーマット変更命令。10日*24時間*60分*60(1/60) ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $dummy) = localtime(time - 30*24*60*60); $log = sprintf("%04d%02d%02d", $year+1900, $mon + 1, $mday); # .は文字列を結合する演算子 $log = "\./log/$log\.csv"; #実際のファイルを削除 #unlink("$log"); #本日の時刻取得 #logにファイル名を準備する ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $dummy) = localtime(time); $year += 1900; $log = sprintf("%04d%02d%02d", $year, $mon + 1, $mday); $log = "\./log/$log\.csv"; #0-9のときには頭に0を付加 if ($hour<10) {$hour = "0$hour";} #ホスト名取得 $host = $ENV{'REMOTE_HOST'}; $addr = $ENV{'REMOTE_ADDR'}; if ($host eq '') {$host = $addr;} if ($host eq $addr){ $host = gethostbyaddr(pack('C4',split(/\./,$host)),2)|| $addr; } #ブラウザ名を取得 $hua = $ENV{'HTTP_USER_AGENT'}; $hua =~ s//>/g; #リンク元の取得 #GETフォーム取得 $buffer = $ENV{'QUERY_STRING'}; @pairs = split(/&/,$buffer); foreach $pair (@pairs) { ($name, $value) = split(/=/, $pair); $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $FORM{$name} = $value; } $ref = $FORM{'ref'}; unless($ref){ $ref = $ENV{'HTTP_REFERER'}; } $ref =~ s/\%7E/\~/ig; if ($ref =~ /file:/i) {$ref ="";} #Cookieの読み込み $test = $ENV{'HTTP_COOKIE'}; @pairs = split(/;/,$ENV{'HTTP_COOKIE'}); foreach $pair (@pairs) { ($name, $value) = split(/=/, $pair); $name =~ s/ //g; $COOKIE{$name} = $value; } #Cookieによる繰り返し訪問のチェック #Cokkieの中身はmday, 有効期限は1日, Cookieの名前は $base_url $cdata = $COOKIE{$base_url}; if ($cdata == $mday){ $visit = 0; }else{ #その日は初回訪問,Cookieをセットする $cookie_kigen = &cookie_time(24*60*60); print "Set-Cookie: $base_url=$mday expires=$cookie_kigen \n"; $visit = 1; } #ログの出力 #追加書き込みは衝突しないので、そのまま書き込む @youbi = ('日', '月', '火', '水', '木', '金', '土'); @month = ('1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12'); open(DB,">>$log"); $test = (stat($log))[7]; if ($test == 0) {print DB "年月日,時間,ホスト名,初回アクセスのとき1,ブラウザ名,前のページのアドレス\n";} print DB "$year/$month[$mon]/$mday($youbi[$wday]), $hour:$min:$sec, $host,$visit,$hua,$ref\n"; close(DB); #カウンタの出力 #カウンタファイルは count0.txt/count1.txt 決め打ちです $count =; close(DATA); open(IN,"./count0.txt"); $count1 = ; close(IN); open(IN,"./count1.txt"); $count2 = ; close(IN); if ($count1 > $count2){ $maxcount = $count1; $i = '1'; }else{ $maxcount = $count2; $i = '0'; } $maxcount++; open(OUT,">count$i.txt"); eval 'flock(OUT,2);'; print OUT $maxcount; eval 'flock(OUT,8);'; close(OUT); #表示ルーチン #gifcatを使って、gifファイルを連結する for ($i = 0; $i< length($maxcount); $i++){ $n = substr($maxcount, $i, 1); push(@files, "../gif/$n.gif"); } printf("Content-type: image/gif\n\n"); binmode(STDOUT); @files=('./logo_right.gif'); print &gifcat'gifcat(@files); exit; #有効期限を設定するとCookieで設定するべく日付を返す sub cookie_time{ local(@youbi, @month, $sec, $hour, $mday, $mon, $year, $wday, $yday, $dummy); $timeoffset = $_[0]; ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $dummy) = gmtime(time + $timeoffset); @youbi = ('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); @month = ('1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12'); $cookie_date = sprintf("%s\, %02d\-%s\-%04d %02d:%02d%02dGMT",$youbi[$wday], $mday, $month[$mon], $year +1900, $hour, $min, $sec); return $cookie_date; }