*

【PHP】ユーザーエージェント(UA)から「デバイス(PC,スマホ,タブレット)」「OS」「ブラウザ」を取得する

公開日: : 最終更新日:2017/04/20 how to, サーバ・プログラム

ユーザーエージェントとは、サイトにアクセスしてきたユーザーの情報を表したものです。

こちらのページで(ちょっと古いですが)それぞれのブラウザやデバイス,os毎に一覧が見られます。

userAgent(ユーザーエージェント一覧)

■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で作ったので、ぜひなんかで使いたいな!っていう人はぜひご活用ください。

完成品とダウンロード

まずは完成品を御覧ください。

デモサイト

ua

こちらのサイトにアクセスするとユーザー(あなた)のユーザーエージェントとともにそこから

  • デバイス(PCorスマホorタブレット)
  • OS
  • ブラウザ

が表で一覧になって出てくるかと思います。

ずばりこいつです。

ダウンロードしたいひとは以下からどうぞ。

自由に改変して使ってね。

ダウンロード

【お願い】これを使ってうまくいったよ!という方はSNSのシェアやコメント残しをしてくれると中の人が非常に喜びます

ダウンロードしてzip解凍すると中身はこちら

ua_check

シンプルに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>

参考サイト
2015年版PHPユーザエージェント判別・判定
正規表現でUser Agent分岐

関連記事

【訴状雛形(ワード)あり】少額訴訟のすゝめ 「少額訴訟の訴状テンプレート(ダウンロード)」~裁判と仲良しになろう~

お金が払ってもらえない時どうする? フリーランスとして活動されているウェブ屋さんや、ス

記事を読む

【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とかのデス

記事を読む

Message

メールアドレスが公開されることはありません。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

  • 高橋拓郎歳)
    愛知県知多市生まれ。
    大学在学中に個人で始めた事業を、大学院中退後法人化(法人化のために中退が正しいかも)。
    簡単にコンタクトとれるのでt@takuro.infoまで何か御用があればなんなりと。
    ブログの感想やご意見も大歓迎です!
人生はサウナ理論~結婚するあなたへ~

人生はサウナ理論。 というのを、敬愛するさんちゃんの名言「生きて

e-taxでの確定申告のもにょもにょ(noteからの転載)

この記事は2016年にnoteに投稿した記事の転載です。 ちょう

【感想】Netflixオリジナルドラマ『Jimmy〜アホみたいなホンマの話〜』 オクレさんもはや本人でしょ??

Netflixオリジナルドラマ『Jimmy〜アホみたいなホンマの話〜』

【javaScript】2017年版 法人税実効税率 シミュレーション 自動計算機(コードも置いとくね)

今日は4/3だからこれは嘘じゃないよ!! 法人税実効税率

【ユーザー車検】軽トラを無料でGETしたけど車検代が無いから初の軽自動車ユーザー車検に挑戦!

青春カーと悲しい別れ どうも。貧乏が板に付いてきて久しい僕で

→もっと見る

PAGE TOP ↑