%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /home/rappan/www/_cgi_ac/access/
Upload File :
Create Path :
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;


Zerion Mini Shell 1.0