アクセスされたブラウザ名を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が先
##サンプルコード
以上を踏まえた上で、以下のようなサンプルコードを作成しました。
// 判定するのに小文字にする
$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」が追加されました。
そのため、IEのところ見てもらえばわかる通り、識別子が2種類あります。
あくまで参考程度にご覧ください。
##関連URL
UserAgentからOS/ブラウザなどの調べかたのまとめ
JavaScriptでUserAgentを使った判別をする
OS、ブラウザごとのCSSハックなどまとめ