Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
24
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

Organization

アクセスされたブラウザ名をPHPで判別する方法

アクセスされたブラウザ名をPHPで判別するサンプルコードを以下に記します。
よりよい方法やバグ等ございましたら、アドバイスいただけると光栄です。

ブラウザを判別するには

PHPでブラウザ名を取得するには、ヘッダーに含まれるHTTP_USER_AGENTを取得し判別します。
実際に $_SERVER変数 の内容を確認してみましょう。

echo $_SERVER['HTTP_USER_AGENT'];

Firefoxを使用していた場合、以下のようなデータが取れます。

Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:57.0) Gecko/20100101 Firefox/57.0

「Firefox」という文字列があるので、それを使えば判定が出来そうです。
strstr関数 を使って判定してみます。

if (strstr($browser , 'Firefox')) {
    echo('ご使用のブラウザはFirefoxです。');
}

これで、Firefoxを使用していることの判定は出来ました。

思ったより簡単そうです。

思わぬ落とし穴

しかし、何事もそう簡単にはいかないのが現実。

Chromeを使っていた場合のユーザーエージェントの文字列をご覧ください。

Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36

「Chrome」という文字列があるので、それを使えば判定が出来そうです。

あれ。ちょっと待った。「Safari」って入ってる。

ちょっと危険な香りがしてきましたね。

続いて、Edgeを使っていた場合のユーザーエージェントの文字列をご覧ください。

Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 Edge/16.16299

おい。「Chrome」も「Safari」も入ってるぞ。どうしてくれるんだ。

なんだかややこしくなってきました。

最後に、Safariを使っていた場合のユーザーエージェントの文字列をご覧ください。

Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/600.8.9 (KHTML, like Gecko) Version/8.0.8 Safari/600.8.9

今度は「Safari」だけかよ!!

といった具合に、一部のブラウザでは非常にややこしい感じになっているので、判定の順序に気を付けないと、本当はChromeを使っているのにSafariを使用していると誤判定したり、Edgeを使っているのにChromeを使用していると誤判定したりする恐れがあります。

なので、以下を踏まえた上でコードを組む必要があります。

① ChromeよりEdgeが先
② SafariよりChromeが先

サンプルコード

以上を踏まえた上で、以下のようなサンプルコードを作成しました。

UserAgentChecker.php

// 判定するのに小文字にする
$browser = strtolower($_SERVER['HTTP_USER_AGENT']);

// ユーザーエージェントの情報を基に判定
if (strstr($browser , 'edge')) {
    echo('ご使用のブラウザはEdgeです。');
} elseif (strstr($browser , 'trident') || strstr($browser , 'msie')) {
    echo('ご使用のブラウザはInternet Explorerです。');
} elseif (strstr($browser , 'chrome')) {
    echo('ご使用のブラウザはGoogle Chromeです。');
} elseif (strstr($browser , 'firefox')) {
    echo('ご使用のブラウザはFirefoxです。');
} elseif (strstr($browser , 'safari')) {
    echo('ご使用のブラウザはSafariです。');
} elseif (strstr($browser , 'opera')) {
    echo('ご使用のブラウザはOperaです。');
} else {
    echo('知らん。');
}

しかし、これらの値はバージョンアップなどで予期せず変更される可能性があります。
実際にIEでは、IE11になってユーザーエージェントの文字列から「MSIE」が削除され「Trident」が追加されました。

Microsoft ユーザー エージェント文字列の変更

そのため、IEのところ見てもらえばわかる通り、識別子が2種類あります。

あくまで参考程度にご覧ください。

関連URL

UserAgentからOS/ブラウザなどの調べかたのまとめ
JavaScriptでUserAgentを使った判別をする
OS、ブラウザごとのCSSハックなどまとめ

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
24
Help us understand the problem. What are the problem?