%PDF- %PDF-
Direktori : /home/rappan/www/_cgi_ac/access/ |
Current File : /home/rappan/www/_cgi_ac/access/accimg.cgi |
#!/usr/local/bin/perl -I../lib #^^^^^^^^これ^^^^^^^^をサーバーにあわせて書き直して下さい ########################################################## # Access Analysis "AshiatoLOG" Ver.2.01 # # # # Copyright (c) 2000,2001,2002 Funakichi # # All rights reserved. # # e-mail: funabin@abox2.so-net.ne.jp # # homepage: http://www04.u-page.so-net.ne.jp/fa2/suga/ # # # ########################################################## # ATTENTION:This code is written with "S-JIS" character-set. require "configA.pl"; #設定ファイル. ##### 引数取得. if ($ENV{'REQUEST_METHOD'} eq "POST") { print "POST<BR>\n"; exit; } $buffer = $ENV{'QUERY_STRING'}; if (($cnt = index($buffer, 'ref='))>=0) { $ref = substr($buffer, $cnt+4); $buffer = substr($buffer, 0, $cnt); } for (split(/&/,$buffer)){ ($name,$value) = split(/=/); $value =~ tr/+/ /; $value =~ s/%([\da-fA-F][\da-fA-F])/pack("C",hex($1))/eg; $value =~ s/\0//g; $DATA{$name} = $value; } $pageID = $DATA{'id'}; $gifimg = $DATA{'img'}; $scrCnd = $DATA{'scr'}; $pageID = 'INDEX' unless ($pageID); #ページID指定がないときは'INDEX'になる。 ##### アクセス集計ファイル追記更新. ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime($^T); $year += 1900; $mon += 1; $date = sprintf("%d/%.2d/%.2d %.2d:%.2d:%.2d",$year,$mon,$mday,$hour,$min,$sec); $logfile = sprintf("$wrdir$wrfile%.2d%.2d%.2d.csv", $year % 100, $mon, $mday); $ref = $ENV{'HTTP_REFERER'} unless ($ref); $agent= $ENV{'HTTP_USER_AGENT'}; $host = $ENV{'REMOTE_HOST'}; $addr = $ENV{'REMOTE_ADDR'}; $ref =~ s/,/%2C/g; $agent =~ s/,/%2C/g; if (&myflock) { open(LOG,">>$logfile"); print LOG "$date, 0,>$pageID,$addr,1,$host,$agent,$ref,$scrCnd\n"; close(LOG); rename($current, $path); } #### アップデート時刻検査. if ($updatetm) { $utm = $^T; LOOP: for ($cnt = 10; $cnt > 0; $cnt -= 1) { $utm -= 86400; ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime($utm); $logfile = sprintf("$wrdir$wrfile%.2d%.2d%.2d.csv", ($year+1900)%100,$mon+1,$mday); if (-f $logfile) { ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atm,$mtm,$ctm,$blksiz,$blks) = stat($logfile); if ($size) { ($uHOR,$uMIN) = split(/:/, $updatetm); $utm += ($uHOR * 60 + $uMIN) * 60 + 86400 - (($utm - $jsthor*3600) % 86400); if ($^T >= $utm and $utm > $mtm) { eval 'require "accupdate.pl";'; if ($@) { open(LOG,">>$wrdir$errfile"); print LOG "$date [$logfile]ファイルのアップデートでエラー\n"; print LOG "$@\n"; close(LOG); } } } last LOOP; } } } ##### 1x1pixelの透過GIFファイルを出力. if ($gifimg) { @img = ( 71, 73, 70, 56, 57, 97, 1, 0, 1, 0,145,255, 0,255,255,255, 0, 0, 0,192,192,192, 0, 0, 0, 33,249, 4, 1, 0, 0, 2, 0, 44, 0, 0, 0, 0, 1, 0, 1, 0, 64, 2, 2, 84, 1, 0, 59 ); print "Content-Type: image/gif\n\n"; binmode(STDOUT); foreach $img (@img) { $_ = pack('C1', $img); print; } } else { print "<BR>\n"; } # ロック sub myflock { $path = $wrdir.$lockfile; for (my $i = 0; $i < $trytime; $i++) { return 1 if (rename($path, $current = $path . time)); sleep 1; } opendir(LOCKDIR, $wrdir); my @filelist = readdir(LOCKDIR); closedir(LOCKDIR); foreach (@filelist) { if (/^$basename(\d+)/) { return -1 if (time - $1 > $timeout and rename($wrdir . $_, $current = $path . time)); last; } } 0; } 1;