【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>
関連記事
-
【訴状雛形(ワード)あり】少額訴訟のすゝめ 「少額訴訟の訴状テンプレート(ダウンロード)」~裁判と仲良しになろう~
お金が払ってもらえない時どうする? フリーランスとして活動されているウェブ屋さんや、ス
-
【WordPress】プラグインBackWPupを3.1.2にアプデしたらDropboxに保存するときにERROR: Dropbox API: (59) ってエラーが出た時の対処法
バックアップと親孝行は後悔した時には遅いので出来るうちにしておけ! という名言がないとかないと
-
起業するときにおすすめのサービス【PCFAXでペーパーレス】 02
前回のやつ 前回の流れから、ミニマムに商売をはじめるためのおすすめのサービスの紹介です。
-
【WordPress】Contact Form 7でEnterキーを押すと勝手に送信されてしまう問題を解決する魔法のコード(JavaScript)
アイキャッチ画像はギャグとして(笑) 就職活動中の女子大生にJavaとJavaScri
-
注文住宅(マイホーム)購入ならスーモカウンターがおすすめ(賛否あるけど) 2/3
注文住宅(マイホーム)購入ならスーモカウンターがおすすめ(賛否あるけど) 1/3
-
キャリアメール非対応のスマホ htc EVO WiMAX でキャリアメールを使う方法(送受信可)
少し前ですが、auより国内初のテザリング対応のスマートフォン htc EVO WiMAX IS
-
【バーチャルホスト】サブドメイン・DNSの設定覚書 概要編
サブドメインをやろうと思いました。 サブドメインをやる目的は自分のサイトがexam
-
BUFFALO(バッファロー)製のNAS「LS410D0201」の純正バックアップ機能だと履歴管理バックアップが出来ないから、ネットブックにAcronis製「True Image」をインストして自前バックアップシステムを作ったなう
タイトル長すぎてうざくて死んで欲しいと思いますが。。。 ネットブックをN君から貰った話の続きと
-
【バーチャルホスト】サブドメイン・DNSの設定覚書 設定(DNS)編
これの続き 設定としては2ステップ。 DNSの設定とサーバの設定です。
-
【googleガジェット】自分のサイトのアクセスのページとかに自宅からの交通費とかを簡単に調べられるやつを設置 1/2~背景~
googleガジェットという便利なもんがあります。 ガジェットというとWindowsとかのデス