*

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

関連記事

お金がなくて、時給が低いことの楽しさ

こんなサイトをたまたま見つけました。 はじめての自作PCで自宅サーバーをはじめた PCケ

記事を読む

【PHP】スマホ対応 メールフォーム設置 PEARを使ってgmailのsmtpサーバで送信する(ダウンロード可能)

メールフォーム(お問い合わせフォーム)をサイトに設置したいというのはよくあります。 で、フォー

記事を読む

注文住宅(マイホーム)購入ならスーモカウンターがおすすめ(賛否あるけど) 3/3

注文住宅(マイホーム)購入ならスーモカウンターがおすすめ(賛否あるけど) 1/3 注文住宅(マイホ

記事を読む

愛車 エブリー

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

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

記事を読む

【結婚式二次会のゲームなどにおすすめ】めくりフリップ 自作 手作り 作り方 材料 で検索にひっかかれ!!

先日友達の結婚式の二次会の幹事をやりました。 その中でゲームの中でめくりフリップあった方がいい

記事を読む

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

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

記事を読む

【PHP】曜日と時間を検出して、いつまでに対応するかを表示する

営業時間中であれば、お問合わせいただいてから何分以内に対応しますよという文句を自動で表示したい。

記事を読む

愛車 エブリー

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

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

記事を読む

注文住宅(マイホーム)購入ならスーモカウンターがおすすめ(賛否あるけど) 1/3

注文住宅紹介サービス「スーモカウンター」とは? 現在注文住宅を建てようと計画中です。 貧

記事を読む

【JavaScript】生年月日を入力したら自動的に現在の年齢を入れてくれる

プロフィールなどで自動で現時点の年齢を入れてくれるプログラム探してて良いサイトがあったので覚書です。

記事を読む

Message

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

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

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

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

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

新紙幣とディープインパクトの単勝馬券

僕は大学生になり、そして20歳になった時に、それまで未成年で禁止されて

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

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

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

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

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

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

→もっと見る

PAGE TOP ↑