【PHP】ユーザーエージェント(UA)から「デバイス(PC,スマホ,タブレット)」「OS」「ブラウザ」を取得する
ユーザーエージェントとは、サイトにアクセスしてきたユーザーの情報を表したものです。
こちらのページで(ちょっと古いですが)それぞれのブラウザやデバイス,os毎に一覧が見られます。
■iPhone
●iOS
Mozilla/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit/420+ (KHTML, like Gecko) Version/3.0 Mobile/1C28 Safari/419.3●iOS2
Mozilla/5.0 (iPhone; U; CPU iPhone OS 2_0 like Mac OS X; ja-jp) AppleWebKit/525.18.1 (KHTML, like Gecko) Version/3.1.1 Mobile/5A347 Safari/52(略)
■Android
●標準ブラウザ (Android OS 1.5)
Mozilla/5.0 (Linux; U; Android 1.5; ja-jp; GDDJ-09 Build/CDB56) AppleWebKit/528.5+ (KHTML, like Gecko) Version/3.1.2 Mobile Safari/525.20.1●標準ブラウザ (Android OS 1.6)
Mozilla/5.0 (Linux; U; Android 1.6; ja-jp; IS01 Build/S3082) AppleWebKit/528.5+ (KHTML, like Gecko) Version/3.1.2 Mobile Safari/525.20.1
Mozilla/5.0 (Linux; U; Android 1.6; ja-jp; IS01 Build/SA180) AppleWebKit/528.5+ (KHTML, like Gecko) Version/3.1.2 Mobile Safari/525.20.1(略)
■Google Chrome
●Beta 1(β1:ベータ1)
Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/525.13 (KHTML, like Gecko) Chrome/0.2.149.27 Safari/525.13
Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.19 (KHTML, like Gecko) Chrome/1.0.154.48 Safari/525.19●バージョン2
Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/530.5 (KHTML, like Gecko) Chrome/2.0.172.33 Safari/530.5(略)
で、こんな感じで結構長ったらしい文字列になっています。
Mozilla/5.0 (iPhone; CPU iPhone OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A403 Safari/8536.25
ただ、良く見てみると上のiPhoneの例で行くと、
Mozilla/5.0 (iPhone; CPU iPhone OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A403 Safari/8536.25
iPhoneって文字列があったりするもんでこの文字列から判断して
- デバイス(PCorスマホorタブレット)
- OS
- ブラウザ
が分かります。
どういう時にユーザーエージェントを使うのか?
で、そんなもんわかってどうすんじゃい!ってのですが。
Google Analyticsなどのアクセス解析などでよく使われます。
前に書いたこの記事
【PHP】〓WordPressとかで便利〓Internet Explorerの古いバージョンの場合は違うページにリダイレクトさせる 概要編 1/2
【PHP】〓WordPressとかで便利〓Internet Explorerの古いバージョンの場合は違うページにリダイレクトさせる ハック編 2/2
でも、アクセス解析で自分のサイトにどういったブラウザでアクセスしてきてるか?を見て自分のサイトの表示や動作をどのブラウザのバージョンまでサポートすべきかの参考にするなどで話ましたが。
ズバリそういった時には重宝します。
ただ、この場合はgoogleがやってるので自分はあんまり意識しなくていいけど。
で、自分で実装しなきゃいけないケースとかだと。。。
最近、googleが検索順位の考慮事項としてモバイルフレンドリー(スマホに対応しているかどうか?)を入れ始めました。
Google、スマホ対応サイトをモバイル検索結果で優遇するアルゴリズム変更を発表、4月21日から適用
その際の対策として、レスポンシブサイトにするのもひとつの手段ですが。
もうひとつ、
- スマホでアクセスしてきたユーザーにはスマホサイト
- PCでアクセスしてきたユーザーにはPCサイト
を表示させる、という方法があります。
その際に、どうやってスマホかPCかを判断するのにこのユーザーエージェントの情報を使います。
この対策のわかりやすい記事はいくつか見つけられます。
このあたりシンプルでわかりやすいですね。
ユーザーエージェントによってPCとスマートフォン(iPhone / Android)を振り分ける方法いろいろ(PHP / JavaScript / .htaccess等)
で、今回はもう少し詳しく情報をまとめて変換したい。
具体的にはタイトルの通り、
ユーザーエージェントから「デバイス(PC,スマホ,タブレット)」「OS」「ブラウザ」
をそれぞれ見つけ出す、というのをPHPで作ったので、ぜひなんかで使いたいな!っていう人はぜひご活用ください。
完成品とダウンロード
まずは完成品を御覧ください。
こちらのサイトにアクセスするとユーザー(あなた)のユーザーエージェントとともにそこから
- デバイス(PCorスマホorタブレット)
- OS
- ブラウザ
が表で一覧になって出てくるかと思います。
ずばりこいつです。
ダウンロードしたいひとは以下からどうぞ。
自由に改変して使ってね。
【お願い】これを使ってうまくいったよ!という方はSNSのシェアやコメント残しをしてくれると中の人が非常に喜びます
ダウンロードしてzip解凍すると中身はこちら
シンプルに2つのファイルだけで、それぞれ「表示用」と「プログラム部分」です。
最後にプログラムを以下に載せて今回は終わりでーす。
ソースコード
一応注釈的に。。。
ユーザーエージェントを取得後osやブラウザを判定するんだけど。
まずスマホのブラウザをゲットするのは中々めんどくさいのと、iPhoneの標準ブラウザかchromeかどうかとかまあどうでもいいんじゃね?
ってことで、スマホの場合はブラウザは取得していません。
それに伴い「表示用」のところでも、スマホの場合はブラウザを表示させないようにしてますです。はい。
【2017.04.20】
→これスマホでも表示されるようにしました。
→あと、Windows10とかEdgeとかもあるけどその辺未対応だったもんで、追加しましたよ!
ua.class.php(プログラム部分)
<?php
/**
*
* UserAgentによる判定
* os
* デバイス(PC,Tablet,スマホ)
* ブラウザ
*/
/** ユーザーエージェント取得 */
if (empty($user_agent)) {
$user_agent = $_SERVER['HTTP_USER_AGENT'];
}
/** os判定 */
if (preg_match('/Windows NT 10.0/', $user_agent)) {
$os = 'Windows 10';
} elseif (preg_match('/Windows NT 6.3/', $user_agent)) {
$os = 'Windows 8.1';
} elseif (preg_match('/Windows NT 6.2/', $user_agent)) {
$os = 'Windows 8';
} elseif (preg_match('/Windows NT 6.1/', $user_agent)) {
$os = 'Windows 7';
} elseif (preg_match('/Windows NT 6.0/', $user_agent)) {
$os = 'Windows Vista';
} elseif (preg_match('/Windows NT 5.2/', $user_agent)) {
$os = 'Windows Server 2003 / Windows XP x64 Edition';
} elseif (preg_match('/Windows NT 5.1/', $user_agent)) {
$os = 'Windows XP';
} elseif (preg_match('/Windows NT 5.0/', $user_agent)) {
$os = 'Windows 2000';
} elseif (preg_match('/Windows NT 4.0/', $user_agent)) {
$os = 'Microsoft Windows NT 4.0';
} elseif (preg_match('/Mac OS X ([0-9\._]+)/', $user_agent, $matches)) {
$os = 'Macintosh Intel ' . str_replace('_', '.', $matches[1]);
} elseif (preg_match('/Linux ([a-z0-9_]+)/', $user_agent, $matches)) {
$os = 'Linux ' . $matches[1];
} elseif (preg_match('/OS ([a-z0-9_]+)/', $user_agent, $matches)) {
$os = 'iOS ' . str_replace('_', '.', $matches[1]);
} elseif (preg_match('/Android ([a-z0-9\.]+)/', $user_agent, $matches)) {
$os = 'Android ' . $matches[1];
} else {
$os = '不明';
}
/** ブラウザ判定(PC以外はスマホと表示) */
// マイナー
if (preg_match('/(Iron|Sleipnir|Maxthon|Lunascape|SeaMonkey|Camino|PaleMoon|Waterfox|Cyberfox)\/([0-9\.]+)/', $user_agent, $matches)) {
$browser = $matches[1];
$version = $matches[2];
// 主要
} elseif (preg_match('/Edge\/([0-9\.]+)/', $user_agent, $matches)) {
$browser = 'Edge';
$version = $matches[2];
} elseif (preg_match('/(^Opera|OPR).*\/([0-9\.]+)/', $user_agent, $matches)) {
$browser = 'Opera';
$version = $matches[2];
} elseif (preg_match('/Chrome\/([0-9\.]+)/', $user_agent, $matches)) {
$browser = 'Chrome';
$version = $matches[1];
} elseif (preg_match('/Firefox\/([0-9\.]+)/', $user_agent, $matches)) {
$browser = 'Firefox';
$version = $matches[1];
} elseif (preg_match('/(MSIE\s|Trident.*rv:)([0-9\.]+)/', $user_agent, $matches)) {
$browser = 'Internet Explorer';
$version = $matches[2];
} elseif (preg_match('/\/([0-9\.]+)(\sMobile\/[A-Z0-9]{6})?\sSafari/', $user_agent, $matches)) {
$browser = 'Safari';
$version = $matches[1];
// ゲーム機
} elseif (preg_match('/Nintendo (3DS|WiiU)/', $user_agent, $matches)) {
$browser = 'Nintendo';
$version = $matches[1];
} elseif (preg_match('/PLAYSTATION (3|Vita)/', $user_agent, $matches)) {
$browser = 'PLAYSTATION';
$version = $matches[1];
// BOT
} elseif (preg_match('/(Googlebot|bingbot)\/([0-9\.]+)/', $user_agent, $matches)) {
$browser = $matches[1];
$version = $matches[2];
} else {
$browser = '不明';
$version = '';
}
/** デバイス判定 */
if (preg_match('/iPhone;/', $user_agent)) {
$device = 'iPhone';
} elseif (preg_match('/iPod/', $user_agent)) {
$device = 'iPod';
} elseif (preg_match('/iPad/', $user_agent)) {
$device = 'iPad';
} elseif (preg_match('/Android/', $user_agent)) {
$device = 'Android';
} elseif (preg_match('/Windows Phone/', $user_agent)) {
$device = 'Windows Phone';
} elseif (preg_match('/(BlackBerry|BB)/', $user_agent)) {
$device = 'BlackBerry';
} elseif (preg_match('/PlayStation Vita/', $user_agent)) {
$device = 'PlayStation Vita';
} elseif (preg_match('/PlayStation Portable/', $user_agent)) {
$device = 'PlayStation Portable';
} elseif (preg_match('/(PS2|PLAYSTATION 3|PlayStation 4)/', $user_agent)) {
$device = 'PlayStation';
} elseif (preg_match('/Nintendo 3DS/', $user_agent)) {
$device = 'Nintendo 3DS';
} elseif (preg_match('/Nintendo (Wii|WiiU)/', $user_agent)) {
$device = 'Nintendo Wii(U)';
} else {
$device = 'PC';
}
index.php(表示用)
<?php require_once "ua.class.php"; ?>
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>ユーザーエージェント</title>
<style>
table {
width: 100%;
border: 1px #888888 solid;
border-collapse: collapse;
border-spacing: 0;
}
th {
padding: 5px;
border: 1px #888888 solid;
border-width: 0 1px 1px 1px;
background: #bbbbbb;
font-weight: bold;
line-height: 120%;
text-align: center;
white-space: nowrap;
}
td {
padding: 5px;
border: 1px #888888 solid;
border-width: 0 0 1px 1px;
background: #ffffff;
}
</style>
</head>
<body>
<h1>ユーザーエージェント</h1>
<table>
<tr>
<th>UA</th>
<td><?php echo $user_agent; ?></td>
</tr>
<tr>
<th>デバイス</th>
<td><?php echo $device; ?></td>
</tr>
<tr>
<th>OS</th>
<td><?php echo $os; ?></td>
</tr>
<?php if ($device == 'PC'){ ?>
<tr>
<th>ブラウザ</th>
<td><?php echo $browser.$version; ?></td>
</tr>
<?php } ?>
</table>
</body>
</html>
関連記事
-
-
20年戦士のオンボロ愛車をパワーアップ(スズキ・エブリーにカーステ取り付け)
ボクの愛車「スズキ・エブリー」です。 ボロいでしょ? エアコンも無くて、窓もパワ
-
-
【覚書】 WordPress 301 リダイレクト URL変更 htaccess 下層ページ そのまま
このブログのURLを http://www.takahashi-takuro.com か
-
-
【WordPress】プラグインBackWPupを3.1.2にアプデしたらDropboxに保存するときにERROR: Dropbox API: (59) ってエラーが出た時の対処法
バックアップと親孝行は後悔した時には遅いので出来るうちにしておけ! という名言がないとかないと
-
-
google Analytics(グーグルアナリティクス)で、自分を除外したいけど、スマホだとIP変わっちゃうよ(>_<)ってときの対処方
タイトルそのまんま。 google Analytics(グーグルアナリティクス)で、自分を除外
-
-
lightbox(ライトボックス)のバージョン2.51からPrototypeじゃなくてjQueryになったから設置の時注意
lightbox(ライトボックス)について前記事を書きました。 lightboxって何?って感
-
-
lightbox(ライトボックス)のie9のバグの修正方法(って言っても新しいバージョン入れなおすだけ)
lightboxっていう無料のJavaScriptがあるの知ってますか? lightboxダウ
-
-
【WordPress】静的htmlサイトをフルCMS化するときにURLを変えないためのパーマリンク自由自在プラグイン「Custom Permalinks」
静的htmlサイトをCMS化(WordPress化)するメリット 一家にひとつは古い静
-
-
【結婚式二次会のゲームなどにおすすめ】めくりフリップ 自作 手作り 作り方 材料 で検索にひっかかれ!!
先日友達の結婚式の二次会の幹事をやりました。 その中でゲームの中でめくりフリップあった方がいい
-
-
【PHP】曜日と時間を検出して、いつまでに対応するかを表示する
営業時間中であれば、お問合わせいただいてから何分以内に対応しますよという文句を自動で表示したい。
-
-
【バーチャルホスト】サブドメイン・DNSの設定覚書 設定(DNS)編
これの続き 設定としては2ステップ。 DNSの設定とサーバの設定です。



高橋拓郎(歳)

