*

【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分岐

関連記事

【バーチャルホスト】サブドメイン・DNSの設定覚書 設定(サーバ)編 いざ!版

これの続き では、いよいよ設定です。 まず設定するファイルは一個だけ

記事を読む

【jQuery】Chart.jsを使って簡単にカッコイイレーダーチャートを実装するの巻

友達の結婚式のプロフィールムービーが終わって一息ついていた頃。。。 いつもお世話になっている弁

記事を読む

【WordPress】Contact Form 7の追加プラグイン「Contact Form 7 DatePicker」便利だけど手動入力されたときにエラー吐いちゃうのの対策

便利なプラグインContact Form 7の追加プラグイン「Contact Form 7

記事を読む

起業するときにおすすめのサービス【PCFAXでペーパーレス】 02

前回のやつ 前回の流れから、ミニマムに商売をはじめるためのおすすめのサービスの紹介です。

記事を読む

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

ユーザーエージェント(UA)から「デバイス(PC,スマホ,タブレット)」「OS」「ブラウザ」

記事を読む

愛車 エブリー

20年戦士のオンボロ愛車をパワーアップ(スズキ・エブリーにカーステ取り付け)

ボクの愛車「スズキ・エブリー」です。 ボロいでしょ? エアコンも無くて、窓もパワ

記事を読む

iPhone5水没 エクスプレス交換サービスで秒速で4,400円(税込)で新品に変わる~AppleCareにより~

今日も元気だ!お酒が旨い。 というわけで尿路結石の激痛で死にかけたのはどこ吹く風と暴飲暴食をし

記事を読む

Amazonの神対応に触れて~月曜始まり縦6行カレンダーはおすすめよ~

おじいちゃんに囲碁の本が欲しいって言われたからアマゾンで買うねって言ったら「そんな遠くまで行かなくて

記事を読む

愛車 エブリー

20年戦士のオンボロ愛車をパワーアップ(スズキ・エブリーにNARDI取り付け)

少し前にカーステを取り替えた愛車の青春カー! ※青春カーの命名はN君です。

記事を読む

「chikirin.com」「chikirin.net」ドメイン取ったよ!

電車が混雑していたらお年寄りに席を譲りましょう。 ってことで席を譲ると、「あたしゃ年寄りじゃな

記事を読む

Message

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

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

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

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

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

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

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

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

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

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

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

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

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

→もっと見る

PAGE TOP ↑