search
LoginSignup
24

More than 3 years have passed since last update.

posted at

updated at

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ハックなどまとめ

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
24