【PHP】日付ごとにファイルにアクセスログを記録する方法

公開日:
更新日:
カテゴリー: PHP

PHPでサイトにアクセスしてきたユーザーの情報(アクセスログ)を日付ごとにファイルに記録する方法を説明しています。

この方法を応用すれば簡易のアクセス解析を作成することも可能です。

アクセスログに記録する情報

アクセスログとして次のような情報をファイルに記録したいと思います。

  • ユーザーのIPアドレス
  • 参照元(アクセス元)
  • ユーザーが閲覧したページのURL
  • ユーザーエージェント
  • アクセスしたときの時間

各種ユーザー情報の取得方法

「ユーザーのIPアドレス」「参照元(アクセス元)」「ユーザーが閲覧したページのURL」「ユーザーエージェント」は、サーバー変数から容易に取得可能です。

その方法は、IPアドレス、リンク元、アクセスページ、ユーザーエージェントの取得方法を参照して下さい。

アクセス時間の取得方法

ユーザーがサイトに「アクセスしたときの時間」はdate関数を使えば取得可能です。

date(ここに取得したい日付のフォーマット);

この関数は引数に取得したい日付のフォーマットを指定すると、その形式にそった時間を返してくれます。

詳しくはリファレンスを見て欲しいのですが、

date(Y-m-d H:i:s);

とすれば「2015-02-10 13:16:52」のような日付を得られます。

ここでは「Y-m-d」と「H:i:s」の間にカンマ「,」を加え、カンマの前部分をファイル名に、カンマの後ろ部分をアクセス時間として利用したいと思います。

date(Y-m-d,H:i:s);

  • Y-m-d → ファイル名に利用
  • H:i:s  → アクセス時間に利用

日付ごとにファイルにアクセスログを記録するプログラム

では実際に、各種ユーザー情報を取得し、日付名のファイルを作成し、そこに記録するプログラムを作ってみたいと思います。

<?php

/*** 各種情報を取得する ***/
	//ユーザのIPアドレス
	$user_ip = $_SERVER['REMOTE_ADDR'];

	//ユーザーが閲覧したページのURL
	$access_url = $_SERVER['REQUEST_URI'];

	//参照元
	$referer = $_SERVER['HTTP_REFERER'];

	//ユーザーエージェント
	$user_agent = $_SERVER['HTTP_USER_AGENT'];

	//アクセス時間
	$access_time = date("Y-m-d,H:i:s");
		//アクセス時間「$access_time」から日付と時間を取得
		$array_access_time = explode(",", $access_time);
			//$array_access_time[0]:日付
			//$array_access_time[1]:時間

/*** 取得した情報をファイルに記録する ***/
	//取得した情報を記録するファイルの指定
	$file_name = $array_access_time[0] . ".txt";

	//ファイルに記録する情報の整理(カンマ「,」で区切る)
	$log_contents =  $array_access_time[1] . "," . $user_ip . "," . $access_url . "," . $referer . "," . $user_agent . "\r\n";

	//ファイルハンドラ生成
	$log_file = fopen($file_name, "a");

	//ファイルのロック
	flock($log_file, LOCK_EX);

	//ファイルへの書き込み
	fputs($log_file, $log_contents);

	//ファイルを閉じる
	flock($log_file, LOCK_UN);
	fclose($log_file);

?>

このプログラムを実行すると、

2015-02-10.txt

のようなファイルが(存在しない場合は)作成され(既にある場合はそのファイルを利用)、

  • 13:16:52,(IPアドレスは省略),/,http://ysklog.net/wp-admin/index.php,(ユーザーエージェントは省略)
  • 13:16:58,(IPアドレスは省略),/server/2422.html,http://ysklog.net/,(ユーザーエージェントは省略)
  • 13:17:05,(IPアドレスは省略),/server/mod_rewrite/1517.html,http://ysklog.net/server/2422.html,(ユーザーエージェントは省略)

のような情報がどんどんファイルに記録(追記)されていきます。

このプログラムをサイトのフッターなどに設置すると、あとはほったらかしにするだけで、日付ごとにアクセスログを記録したファイルがどんどんと作成されていきます。

アクセスログの利用

記録したアクセスログの使い道ですが、エクセルにコピペしてカンマ「,」で区切ればあとは任意の解析ができると思います。

データベースと連携すればアクセス解析も作成可能

今回は簡易に日付名のファイルにアクセスログを記録しましたが、データベースと連携させればSQLクエリの工夫でそれなりに活用できるアクセス解析ができると思います。

またajaxとjavascriptも使えば滞在時間などの情報も取得でき、それこそGoogleAnalyticsに近いものも作れるかもしれません。

 

頑張って書いたのでちょろっと読んでほしい!

 

コメント

まだコメントはありません。

コメントフォーム
お名前
コメント