#!/usr/local/bin/perl #↑各プロバイダで指定しているパスを記述 # # simple_access2 v.1.0(フリーソフト) # Last Modified:2001/08/24 # Copyright (C) 2001 suepon , All rights reserved. # http://CGIScriptMarket.com/ # #------------------------------------------------------------------------# # ログファイルを置くディレクトリの名前 $tmp = "./access"; # ログファイルの名前 $file = "access.dat"; # ファイルロック (0 = OFF 1 = ON) $lock_mode = 0; ($sec,$min,$hour,$day,$mon,$year) = localtime(time - 48*60*60); if ($year < 2000) { $year = 1900+$year; } if ($mon < 10) { $mon = "0$mon"; } if ($day < 10) { $day = "0$day"; } if ($sec < 10) { $sec = "0$sec"; } if ($min < 10) { $min = "0$min"; } if ($hour < 10) { $hour = "0$hour"; } $mon++; $del_date = "$year$mon$day"; ($sec,$min,$hour,$day,$mon,$year) = localtime(time - 24*60*60); if ($year < 2000) { $year = 1900+$year; } if ($mon < 10) { $mon = "0$mon"; } if ($day < 10) { $day = "0$day"; } if ($sec < 10) { $sec = "0$sec"; } if ($min < 10) { $min = "0$min"; } if ($hour < 10) { $hour = "0$hour"; } $mon++; $check_y = "$year$mon$day"; ($sec,$min,$hour,$day,$mon,$year) = localtime(time); if ($year < 2000) { $year = 1900+$year; } if ($mon < 10) { $mon = "0$mon"; } if ($day < 10) { $day = "0$day"; } if ($sec < 10) { $sec = "0$sec"; } if ($min < 10) { $min = "0$min"; } if ($hour < 10) { $hour = "0$hour"; } $mon++; $date = "$mon/$day/$hour:$min:$sec"; $check_t = "$year$mon$day"; $number = "$year$mon$day$hour$min$sec"; $refr = $ENV{'QUERY_STRING'}; $ipadr=$ENV{'REMOTE_ADDR'}; $ipadr =~ s/\./\,/g; $address = pack("C4",split("\,",$ipadr)); ($host,$aliases,$addrtype,$length,@addrs) = gethostbyaddr($address,2); $addr = $ENV{'REMOTE_ADDR'}; if ($host eq $addr) { $host = gethostbyaddr(pack('C4',split(/\./,$host)),2) || $addr; } $agnt = $ENV{'HTTP_USER_AGENT'}; if ($lock_mode) { &lock1; } open(READ,"$tmp$file") || &error; @lines = ; close(READ); foreach $line (@lines) { ($number2,$host2,$addr2,$refr2,$agnt2,) = split(/\,/,$line); $target = substr($number2,0,8); if ($target == $del_date) { last; } push(@new,$line); } $access = "$number\,$host\,$addr\,$refr\,$agnt\n"; unshift(@new,$access); if ($lock_mode) { $lock = "$$\.lock"; } else { $lock = $file; } open(WRITE,"> $tmp$lock") || &error; print WRITE @new; close(WRITE); if ($lock_mode) { &lock2; } @crl = ( "47","49","46","38","39","61","01","00","01","00","80","01","00","00", "00","00","ff","ff","ff","21","f9","04","01","00","00","01","00","2c", "00","00","00","00","01","00","01","00","40","02","02","4c","01","00","3b"); print "Content-type: image/gif\n\n"; foreach (@clr) { $data = pack('C*',hex($_)); print $data; } sub lock1 { local($list,@lists); local($retry) = 3; $list = `ls $tmp$ls` || &error; @lists = grep(/\.lock/,split(/\s+/,$list)); while (@lists) { if (--$retry <= 0) { foreach (@lists) { unlink "$tmp$_" || &error; } &error; } sleep(1); $list = `ls $tmp$ls` || &error; @lists = grep(/\.lock/,split(/\s+/,$list)); } } sub lock2 { local($list,@lists); $list = `ls $tmp$ls` || &error; @lists = grep(!/$lock/,grep(/\.lock/,split(/\s+/,$list))); if (@lists) { if (-e "$tmp$lock") { unlink("$tmp$lock"); } &error; } rename("$tmp$lock","$tmp$file") || &error; } sub error{ print "Content-type:text/html\n\n"; print "file open error\n"; exit; }