プログラミング

PHP でユーザーエージェントを取得して処理を分ける方法

ユーザーエージェントとは

ユーザーエージェントとは、ブラウザが WEB サーバーにページを要求する際に送信する「 HTTP リクエストヘッダー」の中に記載されている、クライアント(ユーザー)の OS やブラウザの情報のことです。

例えば WEB サイトやサービスを運用していて、ユーザーエージェントによって表示内容を変えたり、サイト解析をするためにユーザーが何のデバイスからアクセスしているか知りたい、…という場合にユーザーエージェントを使うことがあります。

(他にもいろいろあると思いますが、今の自分の知識だとこんなトコロ…)

ユーザーエージェントが返す識別子

じゃあそのユーザーエージェントって具体的にどういう情報なの?と言いますと、

ユーザーエージェントが記載されている「 HTTP リクエストヘッダー」はブラウザの「 console 」の「 Network 」タブから確認することができますが、下記のような簡易的なサイトでユーザーエージェントを確認することもできます。

マシンはMac、ブラウザは Chrome を使っている場合は下記のように表示されます。

OS やブラウザのバージョン等の記載がされていることが分かると思います。これが、ユーザーエージェントが返す識別子です。

PHP でユーザーエージェント識別子を取得して処理を分ける方法

今回は PHP でユーザーエージェントが持つ識別子を取得して、その結果によってブラウザに表示させるテキストを変える…ということをやってみたいと思います。

(ユーザーエージェントは JavaScript の「 NavigatorID.userAgent 」プロパティを使って取得することもできますが、今回は PHP で書いてみます)

NavigatorID.userAgent について詳しくはこちらから↓

ソースコード

ソースはサーバーにもアップしていますので、こちらから動作確認ができます↓

動くサンプルはコチラ
// 使用する変数を空文字で初期化
$user_device = '';

// HTTP リクエストヘッダーが持っているユーザーエージェントの文字列を取得
$useragent = $_SERVER['HTTP_USER_AGENT'];
// スマホ・ガラケー・PCそれぞれについて、strpos 関数を使ってクライアントのデバイスを調べる
if((strpos($useragent, 'Android') !== false) &&
    (strpos($useragent, 'Mobile') !== false) ||
    (strpos($useragent, 'iPhone') !== false) ||
    (strpos($useragent, 'iPad') !== false) ||
    (strpos($useragent, 'Windows Phone') !== false)){
    // スマホからアクセスしている場合
    $user_device = 'スマホからみてるよ';
}elseif((strpos($useragent, 'DoCoMo') !== false) ||
    (strpos($useragent, 'KDDI') !== false) ||
    (strpos($useragent, 'SoftBank') !== false) ||
    (strpos($useragent, 'Vodafone') !== false) ||
    (strpos($useragent, 'J-PHONE') !== false)){
    // ガラケーからアクセスしている場合
    $user_device = 'ガラケーからみてるよ';
}else{
    // パソコンからアクセスしている場合
    $user_device = 'パソコンからみてるよ';
}
<body>
  <h2>Q.なんのデバイスから見ているのかな?</h2>
  <div class="answer">A.<?=$user_device?></div>
</body>

出力結果

上記のコードでパソコンからアクセスすると、下記のようにテキストが表示されました!

ユーザーエージェントは近々廃止になる?

Google が今年初頭に Chrome にて近々ユーザーエージェントを廃止する方針を発表しました。

現在コロナの影響で廃止時期は延期になっているようなのですが(来年?)、ゆくゆくは User Agent Client Hints に移行するようです。

まだ具体的な情報が少ないのですが、もし廃止されれば上記で行なっていた処理も使えなくなる可能性がありますし、動向は要チェックかな?と思います。

IT の世界は技術革新のスピードが早いので、こちらから情報を取りに行かないとすぐに置いてけぼりになりそうです…

(いや、今だってマトモに追えてないんだけど…)

まとめ

いかがだったでしょうか?

今回は、 PHP でユーザーエージェントを取得して、その結果によってブラウザに表示させるテキストを変える…といったことをやってみました。

書いてみてまだまだ WEB の動く仕組みの理解が浅いなぁ〜…と思いましたが、日々コツコツやっていきたいと思います。

ここまでお読みいただきありがとうございました!