ブラウザの統計

旧ブラウザの統計は実情に合わなくなったので作り直しました。

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

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

ブラウザ回数
Edge (new)8
Edge (old)1
Firefox16
Opera (new)0
Opera (old)1
IE0
Chrome292
Safari76
Googlebot1
Other274

PHP部分のソース:

<?php
  try {
    $u = $_SERVER['HTTP_USER_AGENT'];
    if (strpos($u, 'Edge/')) {
      $x = 'Edge (old)';
    } elseif (strpos($u, 'Edg/')) {
      $x = 'Edge (new)';
    } elseif (strpos($u, 'Firefox/')) {
      $x = 'Firefox';
    } elseif (strpos($u, 'OPR/')) {
      $x = 'Opera (new)';
    } elseif (strpos($u, 'Presto/')) {
      $x = 'Opera (old)';
    } elseif (strpos($u, 'Trident/')) {
      $x = 'IE';
    } elseif (strpos($u, 'Chrome/')) {
      $x = 'Chrome';
    } elseif (strpos($u, 'Safari/')) {
      $x = 'Safari';
    } elseif (strpos($u, 'Googlebot/')) {
      $x = 'Googlebot';
    } else {
      $x = 'Other';
    }
    $db = new PDO('sqlite:データベースファイル');
    $x = $db->quote($x);
    $sql = "update ua set cnt = cnt + 1 where browser = $x";
    $result = $db->exec($sql) or die('<p>テーブルが更新できません</p>');
    $sql = 'select * from ua';
    echo '<table border="1">', "\n";
    echo "<tr><th>ブラウザ</th><th>回数</th></tr>\n";
    foreach ($db->query($sql) as $entry) {
      echo '<tr><td>', $entry['browser'], '</td><td>', $entry['cnt'], "</td></tr>\n";
    }
    echo "</table>\n";
    $db = null;
  } catch (PDOException $e) {
    echo '<p>エラー:', $e->getMessage(), '</p>';
  }
?>

あらかじめサーバにログインして,例えば次のように打ち込んでおきます:

sqlite3 ファイル名
create table ua(browser text, cnt int);
insert into ua values('Edge (new)', 0);
insert into ua values('Edge (old)', 0);
insert into ua values('Firefox', 0);
insert into ua values('Opera (new)', 0);
insert into ua values('Opera (old)', 0);
insert into ua values('IE', 0);
insert into ua values('Chrome', 0);
insert into ua values('Safari', 0);
insert into ua values('Googlebot', 0);
insert into ua values('Other', 0);
.quit

練習問題:訪問者をiPhone/Android/Windows/Macに分類してカウントするようにしてください。