ブラウザの統計

例1

サーバ変数 のところでブラウザの銘柄が $_SERVER['HTTP_USER_AGENT'] で得られることを勉強しました。

このことを使って,このページをアクセスしたブラウザの銘柄を,SQLite を併用して数えてみましょう(2007-08-04起算)。

ブラウザ回数
Firefox/118
Firefox/2305
MSIE 30
MSIE 40
MSIE 58
MSIE 6498
MSIE 7172
Mozilla/30
Mozilla/412
Mozilla/5538
Mozilla/60
Mozilla/70
Mozilla/80
Mozilla/90
Opera29
Other232
Safari50

ソース:

<?php
  $u = $_SERVER['HTTP_USER_AGENT'];
  if (preg_match("/MSIE \d/", $u, $matches))
    $x = $matches[0];
  elseif (preg_match("/Firefox\/\d/", $u, $matches))
    $x = $matches[0];
  elseif (preg_match("/Safari/", $u, $matches))
    $x = $matches[0];
  elseif (preg_match("/Opera/", $u, $matches))
    $x = $matches[0];
  elseif (preg_match("/Mozilla\/\d/", $u, $matches))
    $x = $matches[0];
  elseif (preg_match("/Mozilla\/\d/", $u, $matches))
    $x = $matches[0];
  else
    $x = "Other";
  $db = sqlite_open('ファイル名')
    or die("<p>ファイルが開けません</p>");
  $sql = "update httpua set cnt = cnt + 1 where browser = '$x'";
  $result = sqlite_query($db, $sql)
    or die("<p>表が更新できません</p>");
  $sql = "select * from httpua order by browser";
  $result = sqlite_array_query($db, $sql, SQLITE_NUM)
    or die("<p>表が読めません</p>");
  $rows = count($result);
  echo "<table border=\"1\">\n";
  echo "<tr><th>ブラウザ</th><th>回数</th></tr>\n";
  for ($i = 0; $i < $rows; $i++) {
    echo "<tr>";
    for ($j = 0; $j < 2; $j++) {
      $s = $result[$i][$j];
      echo "<td>$s</td>";
    }
    echo "</tr>\n";
  }
  echo "</table>\n";
  sqlite_close($db);
?>

あらかじめたとえば次のように表を作っておきます。

  $db = sqlite_open("ファイル名");
  sqlite_query($db, "create table httpua(browser text, cnt int)");
  sqlite_query($db, "insert into httpua values('MSIE 7', 0)");
  sqlite_query($db, "insert into httpua values('MSIE 6', 0)");
  sqlite_query($db, "insert into httpua values('MSIE 5', 0)");
  sqlite_query($db, "insert into httpua values('MSIE 4', 0)");
  sqlite_query($db, "insert into httpua values('MSIE 3', 0)");
  sqlite_query($db, "insert into httpua values('Firefox/1', 0)");
  sqlite_query($db, "insert into httpua values('Firefox/2', 0)");
  sqlite_query($db, "insert into httpua values('Safari', 0)");
  sqlite_query($db, "insert into httpua values('Opera', 0)");
  sqlite_query($db, "insert into httpua values('Mozilla/9', 0)"); // ?
  sqlite_query($db, "insert into httpua values('Mozilla/8', 0)"); // ?
  sqlite_query($db, "insert into httpua values('Mozilla/7', 0)");
  sqlite_query($db, "insert into httpua values('Mozilla/6', 0)");
  sqlite_query($db, "insert into httpua values('Mozilla/5', 0)");
  sqlite_query($db, "insert into httpua values('Mozilla/4', 0)");
  sqlite_query($db, "insert into httpua values('Mozilla/3', 0)");
  sqlite_query($db, "insert into httpua values('Other', 0)");
  sqlite_close($db);
?>

あるいは,サーバにログインして,次のように打ち込んでもかまいません。

sqlite ファイル名
create table httpua(browser text, cnt int);
...(中略)...
.quit

例2

上と同じことを連想配列(associative array)でやってみましょう。

$r = sqlite_array_query($db, "select ...", SQLITE_ASSOC) とすると,結果 $r は通常の配列ではなく連想配列となり,番号ではなく名前で参照できます。

<?php
  $u = $_SERVER['HTTP_USER_AGENT'];
  if (preg_match("/MSIE \d/", $u, $matches))
    $x = $matches[0];
  elseif (preg_match("/Firefox\/\d/", $u, $matches))
    $x = $matches[0];
  elseif (preg_match("/Safari/", $u, $matches))
    $x = $matches[0];
  elseif (preg_match("/Opera/", $u, $matches))
    $x = $matches[0];
  elseif (preg_match("/Mozilla\/\d/", $u, $matches))
    $x = $matches[0];
  else
    $x = "Other";
  $db = sqlite_open('ファイル名')
    or die("<p>ファイルが開けません</p>");
  $sql = "update httpua set cnt = cnt + 1 where browser = '$x'";
  $result = sqlite_query($db, $sql)
    or die("<p>表が更新できません</p>");
  $sql = "select * from httpua order by browser";
  $result = sqlite_array_query($db, $sql, SQLITE_ASSOC)
    or die("<p>表が読めません</p>");
  sqlite_close($db);
  echo "<table border=\"1\">\n";
  echo "<tr><th>ブラウザ</th><th>回数</th></tr>\n";
  foreach ($result as $entry)
    echo "<tr><td>", $entry['browser'], "</td><td>", $entry['cnt'], "</td></tr>\n";
  echo "</table>\n";
?>

2004-05-03起算,2007-08-04にリセットした時点では次の通りでした。

ブラウザ回数
MSIE 319
MSIE 45
MSIE 5586
MSIE 616192
Mozilla/352
Mozilla/4171
Mozilla/55785
Mozilla/66
Mozilla/76
Other1489

奥村晴彦

Last modified: 2007-12-04 13:00:55