Blogブログ

PHP アクセスされたブラウザ名を取得する

こんにちは。HappyLifeCreatorsサポート担当の大谷です。

前回、「PHP始めました」という内容でお届けしましたが、
今回も初心者である私の、
「どうすんねんコレ・・・」
と、日々行き詰まった内容についてお届けしたいと思います。

内容的には初心者と銘打っているだけに、
あさーい内容がメインとなりますが、
限りなく遠浅な感じで頑張っていきたいと思います。

今回のテーマはコチラです。

PHPでアクセスされた端末のブラウザ名を取得する

では確認していきましょう。

$_SERVER変数

$_SERVER[‘HTTP_USER_AGENT’] でユーザーエージェントの取得が可能です。
何コレめっちゃ便利。

中身を見てみると

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とも書いてるし、Edgeとも・・・。

むむむ、ブラウザによってはどっち(どれ)やねんという状態です。
各ブラウザでの取得例をいったん見てみましょう。

ユーザーエージェントの取得例

  • Chrome
    Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36
  • 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
  • Internet Explorer
    Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident/5.0; Trident/5.0)
    Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko
  • Safari
    Mozilla/5.0 (iPhone; CPU iPhone OS 14_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.1 Mobile/15E148 Safari/604.1
  • FireFox
    Mozilla/5.0 (Windows 6.2; rv:20.0) Gecko/20121202 Firefox/20.0
  • Safari
    Mozilla/5.0 (iPhone; CPU iPhone OS 14_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.1 Mobile/15E148 Safari/604.1
  • Opera
    Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 OPR/57.0.3098.106Opera

ほうほう、文字列を切り出して判断する場合、EdgeChromeSafari、そしてOperaあたりは混在している為、考慮する必要がありそうです。
IEは、MSIETrident、FireFoxはそのままFireFoxで判別可能。素直でよかった。
今回はそれらを踏まえ、If文の判定を以下の順番で判定してみます。

Edge ⇒ Opera ⇒ Chrome ⇒ Safari ⇒ IE ⇒ FireFox

上記を考慮して、実際にコーディングしてみました。

コード1

上記プログラムは $browser に判定したブラウザ種類の文字列を保存します。
こんな感じで取得できるんですね~。なるほど。

ユーザーエージェントの種類

ところでブラウザの判定もそうですが、ユーザーエージェントの種類、多すぎてなかなかにえげつない・・・。
興味のある方はブラウザ戦争の経緯など、調べてみてください。

浅さを売りにしている私が扱うにはあまりに不向きすぎます(笑)

100%の精度で切り分けるのは難しいと思うので、
最低ここまでは判別したい!っていう範囲で利用してみてはいかがでしょうか。

お付き合いいただきありがとうございました!
それではまた!

大谷

執筆者

Developer

大谷