noshi’s diary

ゲームの事、映画やドラマ、思いついた事、プログラミングの事、雑記的なことを書いています

アクセスログ解析に四苦八苦

アクセスログを簡易的に作成

// 有効な場合は書き込まない
if (empty($_COOKIE['acsess'])){
//現在の日付を取得
$time = gmdate("Ymd",time()+60*60*9);
//現在の時刻を取得
$time2 = gmdate("H:i",time()+60*60*9);
//アクセスページを取得
//$access_url = 'http://' . $_SERVER[HTTP_HOST] . $_SERVER[REQUEST_URI];
//IPアドレスを取得
$ip=getenv("REMOTE_ADDR");
$ip=gethostbyaddr(getenv("REMOTE_ADDR"));
//ホスト情報を取得
$host = getenv("REMOTE_HOST");
//実行しているファイル名を取得
$self=$_SERVER[PHP_SELF];
//リファラー(リンク元)を取得
$refur = $_SERVER['HTTP_REFERER'];
//使用ブラウザ
$ua=$_SERVER[HTTP_USER_AGENT];
$accessLog = $time." ".$time2."".$authuser." ".$ip." ".$host." ".$refur." ".$ua."\n";
// ログファイルの内容を取得
$lines = file('./log.cgi');
$fp = @fopen('./log.cgi', 'w') or die("ファイルを取得できません!");
// 俳他的ロック
if (flock($fp, LOCK_EX)) {// 書き込み
fwrite($fp, $accessLog);
// 50行まで登録
if(count($lines) > 50 {
$max_i = 50;} else {
$max_i = count($lines);
}
for ($i = 0; $i < $max_i; $i++) {
fwrite($fp, $lines[$i]);
}
} // ロック解除
flock($fp, LOCK_UN);
// 有効時間(1800)30分
setcookie("access", 1, time() + 1800);
}

こんな感じで、サーバーのログが取得できました。 あとは、解析用のプログラムファイルを作成するのですが、ブラウザ別やホスト別、日付別にいろいろやろうとすると、これが結構たいへん。 とりあえず、無料の解析スクリプトに上記で得たログを読み込ませていますが、個人的には『ユーザー別(ログインしてきたユーザーとその人数)※重複ユーザーは排除』も取得できるようなプログラムをつくりたいんです。 重複ユーザーをカウントしないようにするには、クッキーを使う方法もあるということだったので、近いうちに試してみよう。