【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>
関連記事
-
Amazonの神対応に触れて~月曜始まり縦6行カレンダーはおすすめよ~
おじいちゃんに囲碁の本が欲しいって言われたからアマゾンで買うねって言ったら「そんな遠くまで行かなくて
-
【PHP】〓WordPressとかで便利〓Internet Explorerの古いバージョンの場合は違うページにリダイレクトさせる ハック編 2/2
【PHP】〓WordPressとかで便利〓Internet Explorerの古いバージョンの場合は
-
【googleガジェット】自分のサイトのアクセスのページとかに自宅からの交通費とかを簡単に調べられるやつを設置 2/2~具体的なhowto~
これの続きです。 で、具体的な方法。 説明したgoogleガジェットに、goog
-
会社を作ったら郵便局に集荷してもらったり銀行引き落とししてもらえるようになろう!
おすすめのサービス 01 おすすめのサービス 02 これの続きっぽい感じ。
-
【WordPress】プラグインBackWPupを3.1.2にアプデしたらDropboxに保存するときにERROR: Dropbox API: (59) ってエラーが出た時の対処法
バックアップと親孝行は後悔した時には遅いので出来るうちにしておけ! という名言がないとかないと
-
【PHP】時間を扱うときはdate_default_timezone_set(‘Asia/Tokyo’);を入れよう
タイトルそのまんま。そんだけ。 日本国内のサービスでphpで時間を扱うときは、サーバの設定いじ
-
注文住宅(マイホーム)購入ならスーモカウンターがおすすめ(賛否あるけど) 1/3
注文住宅紹介サービス「スーモカウンター」とは? 現在注文住宅を建てようと計画中です。 貧
-
起業するときにおすすめのサービス【PCFAXでペーパーレス】 02
前回のやつ 前回の流れから、ミニマムに商売をはじめるためのおすすめのサービスの紹介です。
-
【WordPress】WP-PageNaviがデフォルト設定が左寄せだもんで、真中揃えにする方法
WordPressの人気プラグインでWP-PageNaviってやつがあります。 何のプラグイン
-
【WordPress】コアファイル・プラグインを更新するとき、FTP情報求められたり、パーミッションエラーの時の対策
メモメモ chownで所有者を一括変換しちゃう。 chown -R apache:a