ログアナライザーの作成
ログアナライザーを作成するには、PHPの環境変数から、
$log_date = date(“Y-m-d”); // アクセス日
$log_time = date(“H:i:s”); // アクセス時間
$log_ip = $_SERVER[‘REMOTE_ADDR’]; //訪問者のipアドレス
$log_url = $_SERVER[‘HTTP_USER_AGENT’]; //訪問者のユーザーエージェント(訪問者のurlは取得できないので、かわりにユーザーエージェント情報を取得)
$log_host = $_SERVER[‘REMOTE_HOST’]; //訪問者のホスト
$log_referrer = $_SERVER[‘HTTP_REFERER’]; //遷移元
$log_language = $_SERVER[‘HTTP_ACCEPT_LANGUAGE’]; //訪問者の言語名
などの情報を取得し、取得したデータ毎に、日別、時間帯別などの条件で整理することになります。
ただ、訪問者のサーバーの設定ではホスト名を取得できない場合がありますので、$hostname = gethostbyaddr($_SERVER[‘REMOTE_ADDR’]) のようなメソッドで、ホスト名を逆引きする必要性も出てきます。
また、$_SERVER[‘HTTP_ACCEPT_LANGUAGE’]で国名を取得できるということですが、実際に取得できるのは ja,en-US;q=0.7,en;q=0.3 のような文字列なので、これを国名に変換する手順が必要になってきます。
PHPで訪問者の国名を取得するには、GeoIP2-phpといったモジュールをインストールすることが推奨されていますが、工夫次第で何とかなりそうなので、それにかわる方法を考えます。
$_SERVER[‘HTTP_ACCEPT_LANGUAGE’]で取得できるja、enなどの略語は定型になっているようで、たとえばdeならドイツ語、frならフランス語を意味し、ja,en-US;q=0.7,en;q=0.3 のなかから最初の2文字を切り出し、それに対応する言語名を取得できれば、ある程度正確に、訪問者の国名が取得できることになります。
最初の2文字の切り出しは substr($log_language, 0,2) で行い、es-AR(スペイン語/ アルゼンチン)のように5文字のものは、ハイフンの有無を判定し、ハイフンがあれば5文字切り出します。
これをあらかじめ作成しておいた
is | アイスランド語 |
---|---|
pl | ポーランド語 |
fr-CA | フランス語/ カナダ |
のようなデータベースと照合し、返ってきた言語名を他のアクセス情報と一緒に記録すると、訪問者の国名が表示されるログアナライザーが出来上がることになります。
完成したログアナライザー(訪問者のipアドレス、訪問者のユーザーエージェント、訪問者のホスト、訪問者の遷移元、訪問者の国名(言語名)がわかります)
訪問者の国名を表示できるようにするために作られた、言語名(略称)と言語名(正式名)が対になった言語情報を記録したデータベース