旧ブラウザの統計は実情に合わなくなったので作り直しました。
サーバ変数 のところでブラウザの銘柄が $_SERVER['HTTP_USER_AGENT'] で得られることを勉強しました。
このことを使って,このページをアクセスしたブラウザの銘柄を,SQLite を併用して数えてみましょう。
| ブラウザ | 回数 |
|---|---|
| Edge (new) | 13 |
| Edge (old) | 1 |
| Firefox | 20 |
| Opera (new) | 0 |
| Opera (old) | 1 |
| IE | 0 |
| Chrome | 333 |
| Safari | 103 |
| Googlebot | 1 |
| Other | 375 |
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に分類してカウントするようにしてください。