#!/usr/bin/perl

#**** access log program *****
# アクセスログ収集プログラム
# Version 1.0 2002/01/25 mikio.fujio	: 初期版
#

# ファイル名の設定
$agent = "agent.log";					# ブラウザ情報格納ファイル名
$refer = "refer.log";					# リンク参照情報格納ファイル名
$host = "host.log";						# ホスト情報格納ファイル名

# ログプログラムの実行
&logging($agent,"agent");				# ブラウザ情報の更新
&logging($refer,"refer");				# リンク参照情報の更新
&logging($host,"host");					# ホスト情報の更新

sub logging{
	my($fname, $flag) = @_;				# 引数の取得(ローカル変数)

	# 情報の選択と取得
	if($flag eq "agent"){
		$env = "$ENV{'HTTP_USER_AGENT'}";
	}elsif($flag eq "refer"){
		$env = "$ENV{'HTTP_REFERER'}";
	}else{
		$env = "$ENV{'HTTP_HOST'}";
	}

	# ファイルのオープン
	open(FP,"$fname");					

	# データ数の取得
	$dnum = <FP>;chop($dnum);			# データ数の取得と改行削除

	# logデータの取得と格納
	$n = 0;								# カウンタの初期化
	$flg = 0;							# 検索フラグ
	while($n<$dnum){
		$line = <FP>;					# ユーザlogの取得
		$num = <FP>;					# 回数の取得
		chop($line); chop($num);		# 改行の除去
		if($line eq $env){				# 一致検索
			$num = $num + 1;			# 一致していれば回数を増やす
			$flg = 1;					# 検索終了フラグＯＮ
		}
		push(@logid, $line);			# ユーザlogの配列への格納
		push(@lognum, $num);			# 回数の配列への格納
		$n = $n + 1;					# カウンタの更新
	}
	if($flg==0){						# 一致しなかった場合は追加
		push(@logid,$env);				# ユーザlogの追加
		push(@lognum,1);				# 回数を "1"にする
		$dnum = $dnum + 1;				# 全体の数を更新
	}
	close(FP);							# ファイルのクローズ

	# ファイルへの書き出し
	open(FP, ">$fname");				# ファイルのオープン
	print FP "$dnum","\n";				# データ総数の書き出し
	$n = 0;
	while($n<$dnum){					# データの書き出し
		$line = shift(@logid);			# ブラウザ情報の取り出し
		print FP "$line\n";				# 書き込み
		$num = shift(@lognum);			# アクセス回数の取り出し
		print FP "$num\n";				# 書き込み
		$n = $n + 1;					# カウンタの更新
	}
	close(FP);							# ファイルのクローズ
}
