$_SERVER['HTTP_USER_AGENT']の理解
$_SERVER['HTTP_USER_AGENT']は
HTTPリクエストを送信したクライアントのブラウザを識別するために使用されるリクエストヘッダ変数です。クライアント(訪問者)のブラウザ名、バージョン、オペレーティングシステム、デバイス、クローリングbot、プラグインなどの情報が文字列として含まれています。
- クライアント(訪問者)がどの種類のブラウザを使用しているかを確認する際に有用です。
- PHPのスーパーグローバル変数の一つであり、グローバルスコープ(グローバル範囲、Global Scope)で使用できます。
注意してください!$_SERVER['HTTP_USER_AGENT']のようなクライアント側の情報をセキュリティ関連の目的で利用する場合は、追加で適切な対策が必要です。
注意してください!
キャッシュ設定によっては、$_SERVER['HTTP_USER_AGENT']の値がキャッシュされる場合があります。キャッシュされた値は実際のクライアント情報と異なる可能性があるため、$_SERVER['HTTP_USER_AGENT']を使用してクライアントの特性を判別したり、ユーザーに合わせたコンテンツを提供したりする場合に問題が発生することがあります。
$_SERVER['HTTP_USER_AGENT']変数の値
$_SERVER['HTTP_USER_AGENT']変数を確認するには、次のようにします。
echo $_SERVER['HTTP_USER_AGENT'];
/* echoまたはvar_dump($_SERVER['HTTP_USER_AGENT']);などのように、
変数を確認するあらゆる方法で確認できます。*/
このスクリプトのサンプル出力は、次のようであると仮定します。
$_SERVER['HTTP_USER_AGENT']変数のサンプル出力画面であり、理解を助けるために一部の情報のみを抜粋しています。
$_SERVER['HTTP_USER_AGENT']の値が上記のサンプル出力として与えられている場合、その値から取得できる情報は次のとおりです。
- オペレーティングシステム:Windows NT 10.0
- プラットフォーム:Win64(64ビットWindows)
- レンダリングエンジン:WebKit(Appleが開発したWebKitレンダリングエンジンであり、WebKitのバージョンが537.36であることを示します)
- ブラウザ名:Chrome
- ブラウザのバージョン:119.0.0.0
このように、$_SERVER['HTTP_USER_AGENT']には、クライアント(訪問者)のブラウザ名、バージョン、オペレーティングシステム、デバイス、プラグインなどの情報が文字列として含まれています。
$_SERVER['HTTP_USER_AGENT']変数値の活用
$_SERVER['HTTP_USER_AGENT']変数の値は、次のような状況で活用すると非常に有用です。
- クライアント(訪問者)のブラウザチェック
- PHPモバイルチェック
- PHPでモバイルのiOSとAndroidを判別
クライアント(訪問者)のブラウザチェック
$_SERVER['HTTP_USER_AGENT']は、クライアント(訪問者)がどの種類のブラウザを使用しているかをチェック(識別)する際に有用です。ここでは、主要なブラウザをいくつか判別する方法について紹介します。
注意事項!
紹介するサンプルコードは、クライアント(訪問者)のブラウザをUser Agent文字列に基づいて検出する簡易的な方法を提供します。User Agentを基にしたブラウザ判別は完全ではなく、特にセキュリティ関連の目的で利用する場合は、追加で適切な対策が必要です。
Chrome(クローム)ブラウザをチェックする
if (stripos($_SERVER['HTTP_USER_AGENT'], 'chrome') !== false) {
echo '訪問者はChromeブラウザを使用しています。';
}
コードを簡単に解説してみましょう。
$_SERVER['HTTP_USER_AGENT']-:これは、現在のHTTPリクエストを送信したクライアントのUser Agent文字列を表します。stripos($_SERVER['HTTP_USER_AGENT'], 'chrome'):stripos()関数を使用して、User Agent文字列内に「chrome」という文字列が含まれているかを確認します。stripos()関数は大文字と小文字を区別せずに文字列を検索する関数で、見つかった場合はその位置を返します。!== false:stripos()関数の戻り値がfalseではない場合(つまり「chrome」が見つかった場合)、条件は真となります。echo '訪問者はChromeブラウザを使用しています。';:条件が真の場合、つまりユーザーがChromeブラウザを使用しているときに、このメッセージが出力されます。
したがって、このコードはユーザーのブラウザがChromeである場合に、該当するメッセージを出力する役割を果たします。
Safari(サファリ)ブラウザをチェックする
$ua = $_SERVER['HTTP_USER_AGENT'];
if ((stripos($ua, 'safari') !== false) && (stripos($ua, 'chrome') === false)) {
echo '訪問者はSafariブラウザを使用しています。';
}
$_SERVER['HTTP_USER_AGENT']を確認すると、Safari(サファリ)ブラウザには'Safari'という文字列が含まれていることが分かります。
注意点として、Chrome(クローム)ブラウザを$_SERVER['HTTP_USER_AGENT']で確認すると、'Safari'という文字列も含まれている場合があるという点が挙げられます。(ここでは詳細には触れません。)そのため、上記のコード例では'Safari'という文字列が含まれていて、かつChrome(クローム)ブラウザではないという条件を設けることで、Safari(サファリ)ブラウザを使用している訪問者をチェックしています。
Firefox(ファイアフォックス)ブラウザをチェックする
if (stripos($_SERVER['HTTP_USER_AGENT'], 'firefox') !== false) {
echo '訪問者はFirefoxブラウザを使用しています。';
}