#!/usr/local/bin/perl
#
# WebACCESS Type 2 for SSIバージョン  (c)rescue.ne.jp
#
# 設置の例
#
# public_html
#      |
#      |-- index.html # ここにアクセスされた時のログを記録. (SSIを記述するファイル)
#      |
#      |                    このファイル内の<body>内のどこかに
#      |                    <!--#exec cmd="./log/webaxs2.pl"-->
#      |                    を記述します.
#      |
#      |-- log/ (777)
#           |
#           |-- bar.gif # グラフ用画像
#           |-- webaxs2.pl (755) # ログ取得スクリプト(SSIによって起動するプログラム)
#           |-- webaxs2.cgi (755) # 解析結果表示ＣＧＩ

# 上記の構成でとりあえず設置する場合は、以下何も変更することはありません.

#ログファイルの場所をＳＳＩ記述するＨＴＭＬから見たパスを設定
$base_dir = "./log/";

# 集計に含めないＵＲＬを指定（この文字列を含むデータを記録しない）
# .の前には\を書く

@mine = (

	"http://www\.host\.jp/~user/",
	"",
	"",
	"",
);

#------------------------------------------------------------------------------------

#時刻関係は、外国サーバを利用の方は当サイトのＦＡＱを読んで時差調整してください.

#２日前のログを削除
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time - 48*60*60);
$del_log = sprintf("%02d%02d%02d",$year,$mon +1,$mday);
$del_log = $base_dir . "$del_log\.csv";
unlink("$del_log");

#本日の時刻取得
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
$log = sprintf("%02d%02d%02d",$year,$mon +1,$mday);
$log = $base_dir . "$log\.csv";

#ホスト名取得
$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; }

$ref = $ENV{'HTTP_REFERER'};
$ref =~ s/\%7E/\~/ig;

if ($hour < 10) { $hour = "0$hour"; }

# ブラウザ名の取得
# Mozilla/3.0 (Windows 95; I) の場合 -> Mozilla/3
# Mozilla/2.0 (compatible; MSIE 3.01; Windows 95) の場合 -> MSIE/3 (Mozilla compatible)

$HTTP_USER_AGENT = $ENV{'HTTP_USER_AGENT'};
$HTTP_USER_AGENT =~ s/</&lt;/g;
$HTTP_USER_AGENT =~ s/>/&gt;/g;

($hua,$vers) = split('/',$HTTP_USER_AGENT);

if ($vers =~ /MSIE/) {

   ($hua1,$dummy1) = split(/MSIE /,$vers);
   ($hua2,$dummy2) = split(/\;/,$dummy1);
   ($hua3,$dummy3) = split(/\./,$hua2);
   ($hua4,$dummy4) = split(/\(/,$vers);
   ($hua5,$dummy5) = split(/\./,$hua4);
    $hua ="MSIE\/$hua3 (Mozilla/$hua5 compatible)";
}

elsif ($hua eq "Mozilla") {

   ($hua4,$dummy4) = split(/\(/,$vers);
   ($hua5,$dummy5) = split(/\./,$hua4);
    $hua ="Mozilla\/$hua5";
}

# リモートホスト名の判定

if ($host =~ /(.*)\.(\d+)$/) { ; }
elsif ($host =~ /(.*)\.(.*)\.(.*)\.(.*)$/) { $host = "\*\.$2\.$3\.$4"; }
elsif ($host =~ /(.*)\.(.*)\.(.*)$/) { $host = "\*\.$2\.$3"; }

# リンク元の取得

if ($ref =~ /file:/i) { $ref = ""; }
foreach $i (@mine) { if ($i ne '' && $ref =~ /$i/i) { $ref = ""; last; } }

if (!open(DB,">> $log")) { print "LOG_OPEN_ERROR"; exit; }
print DB "$hour\,$ref\,$host\,$hua\,2\,\n";
close(DB);

chmod 0666,$log;

exit;


