ポンクソフト

アクセス解析2 - PHPでアクセスカウンタ&解析

前ページ PHPでアクセスカウンタ&解析 TOP 次ページ

目次

  1. PHPでアクセスカウンタ&解析
  2. テキストカウンタ
  3. 画像カウンタ
  4. アクセス解析1
  5. アクセス解析2
  6. アクセス解析3
  7. アクセス解析4

アクセス解析2

アクセス解析の一例として、ユーザーエージェントの多い順に表示します。

ページの作成

まずカウンタを表示するページを作成します。page1.php を開き
あなたは<?php require "counter1.php" ?>人目のお客様です。
の部分を
あなたは<?php require "counter4.php" ?>人目のお客様です。
に書き換えて「page4.php」という名前でサーバにアップしてください。

カウンタプログラムの作成

次にアクセスカウンタのプログラムを作成します。以下のソースを入力してください。
<?php
// アクセスカウンタ4

if ($_GET['log'] == 'yes') {
  print "<html><body>\n";
  $logs = file("log.txt");
  $agents = array();
  foreach ($logs as $l) {
    $l = rtrim($l);
    list($date, $agent) = explode("\t", $l);
    array_push($agents, $agent);
  }
  $ranks = array_count_values($agents);
  arsort($ranks);
  print "<table border='1'>\n";
  foreach ($ranks as $k => $v) {
    print "<tr><td>$k</td><td>$v 件</td></tr>\n";
  }
  print "</table>\n";
  print "</body></html>\n";
  exit();
}

$fp = @fopen("counter4.txt", "r+") or die("Counter Error");
flock($fp, LOCK_EX);
$count = fgets($fp);
$count++;
rewind($fp);
fputs($fp, $count);
fclose($fp);

$log = date("Y/m/d H:i:s") . "\t";
$log .= $_SERVER['HTTP_USER_AGENT'] . "\n";
$fp = @fopen("log.txt", "a") or die("Log Error");
flock($fp, LOCK_EX);
fputs($fp, $log);
fclose($fp);

print "<a href='counter4.php?log=yes'>$count</a>";
?>
入力が終わったら「counter4.php」という名前でサーバにアップします。

カウンタファイルの作成

次に先ほどと同じくアクセスカウントを保存するためのファイルを作成します。新規テキストファイルを作成し
0
とだけ記述して(改行は入れない)、「counter4.txt」という名前でサーバにアップします。その後、FTPソフトの「属性変更」から「その他」に書込許可属性を与えます。

実行

以上の用意ができたら、page4.php をブラウザでアクセスしてみてください。カウンタのリンクをクリックすると、アクセス解析の結果が表示されます。

counter4.php ソースの解説

$logs = file("log.txt");
ログファイル log.txt の内容を一行ずつ配列 $logs に格納します。
$agents = array();
配列 $agents を定義しています。この配列にはユーザーエージェントが入ります。
foreach ($logs as $l) {
配列 $logs から一行ずつ取り出して $l に代入しつつループします。
$l = rtrim($l);
それぞれの行の終端には改行が付いているのでその改行を除きます。
list($date, $agent) = explode("\t", $l);
各行の項目はタブで区切られているので、explode 関数によって各項目を取得しています。explode 関数は配列を返しますが、それを各自別々の変数に代入したい場合は list 命令を使います。
array_push($agents, $agent);
取得したユーザーエージェント部分を配列 $agents に追加しています。array_push は配列の末尾に変数を追加する関数です。
$ranks = array_count_values($agents);
array_count_values は配列の同じ要素を数える関数です。要素がキー、出現回数が値となった配列が戻り値になります。
arsort($ranks);
出現回数を数えた配列を、値の降順でソートしています。これによって出現回数の多い順に並び替えています。
  print "<table border='1'>\n";
  foreach ($ranks as $k => $v) {
    print "<tr><td>$k</td><td>$v 件</td></tr>\n";
  }
  print "</table>\n";
ユーザーエージェントとその出現回数をテーブルにして出力しています。
前ページ PHPでアクセスカウンタ&解析 TOP 次ページ
このエントリーをはてなブックマークに追加 そっか0