browscap を用いてブラウザーの判定を可能にする
SPECIAL
browscap によるブラウザー判定を可能にする
Web サイトを訪れた人のブラウザーの種類を知る方法として、HTTP_USER_AGENT ヘッダーを確認する方法があります。
この環境変数を、例えば PHP の場合には $_SERVER['HTTP_USER_AGENT'] で取得することによって、ブラウザーから渡された情報を確認することができるようになっていますが、この情報はどちらかというと汎用的で、手軽に判別したいような場面では少し扱いが面倒なように思います。
そんなとき browscap を利用すれば、この HTTP_SERVER_AGENT ヘッダーのブラウザー情報を整理し終わった情報を PHP から取得できるようになります。
ただ、browscap は平成 22 年 5 月 2 日現在、標準では PHP には組み込まれていないようですので、利用の際にはあらかじめサーバーに browscap を組み込んでおく必要があります。Microsoft 社の IIS 5.0 以降には標準で browscap が組み込まれているようですので、すぐに利用することが可能です。但し、判別用のデータファイルは最新の情報に更新した方がよさそうですけど。
そんな感じで今回は、CentOS 5.4 上で動作している php 5.2.10 に、browscap を組み込む方法についてを主にして、IIS についての話も交えつつ記してみようと思います。
PHP で browscap を利用可能にする
平成 22 年 5 月 2 日現在、browscap は http://browsers.garykeith.com/ からダウンロードできるようになっています。
PHP での利用の場合
ここの "Downloads" ページから、PHP 用の browscap を /etc/ ディレクトリーにダウンロードします。いくつか種類がありますが、"Use only with PHP!" という赤字のラベル記載のある "php_browscap.ini" というのが、PHP で使用できるファイルとなります。
"php_browscap.ini" をダウンロードしたら、まずは PHP サーバーの設定ファイルを調整します。
CentOS 5.4 の場合、PHP の設定ファイルは "/etc/php.ini" にありますので、そちらを編集して、以下のように [browscap] 拡張モジュールの設定を行います。
[browscap]
browscap = /etc/php_browscap.ini
設定が完了したら、CentOS 5.4 では次のようにして Apache の設定を読み込みます。
service httpd reload
これで browscap が利用できるようになりました。
正しく設定が反映されているかどうかについては、PHP を導入した場合におなじみの <?php phpinfo(); ?> で確認すると、現在の browscap の設定値がどのようになっているかを確認することができるようになっています。
IIS での利用の場合
ちなみに、IIS の場合は、ダウンロードの際に "Do not use with PHP!" という赤字のラベル記載のある "browscap.ini" を選択します。
IIS には browscap が "WSWC.BrowserType" という ProgID の Browser Capabilities コンポーネントとして標準で用意され、すぐに使用できる状態になっています。データファイルは "browscap.dll" と同じ場所、通常はシステムフォルダー (C:\Windows\System32 等) の中の "inetserv" フォルダー内に格納されていると思いますので、そこの "browscap.ini" ファイルを、ダウンロードした新しいものに差し替えてあげる形になります。
browscap でブラウザー情報を確認する
PHP での利用の場合
browscap が利用できるようになったら、PHP では次のようにして、情報を取得することができます。
まず、ブラウザーからサーバーに送られてきた HTTP_USER_AGENT の情報をもとに整理された情報を、例えば、スカラー変数 $browser に取得します。
$browser = get_browser();
この get_browser() 関数が、browscap でブラウザー情報を取得するための関数になります。
他にも引数で、任意の USER_AGENT 情報を渡したり、スカラー変数ではなく配列変数として情報を取得することもできるようになっているようですが、ここでは触れないで置くことにします。
$browser にブラウザー情報が取得できたら、あとはそれを次のようにして画面に出力するなど、操作を行うことができるようになります。
print('Browser = ' . $browser->browser);
print('Version = ' . $browser->version);
print('Platform = ' . $browser->platform);
このような感じで、必要な情報を取得することができるようになっています。
指定できる項目としては、"php_browscap.ini" ファイル内に見受けられる "Browser" や "MajorVer" といったものになるようです。その際の注意事項としては、PHP での取得の場合、"php_browoscap.ini" 内にある項目名をすべて小文字にして取得しないと、値が取得できない感じです。たとえば、"isMobileDevice" なら、上記の例では $browser->ismobiledevice といった具合です。
ともあれこれで、例えば EZ-NET ディクショナリ: HTTP ブラウザー情報 で表示されるような情報をスクリプトで取得して、それに応じた処理を実装することが可能になります。
IIS での利用の場合
なお、ASP (Active Server Pages) の場合には、スクリプト内で次のようにして Browser Capabilities コンポーネントのインスタンスを生成します。
Set browser = Server.CreateObject("MSWC.BrowserType")
Browser Capabilities コンポーネントのインスタンスを取得したら、あとは次のようにして画面に出力するなど、操作を行うことが可能です。
Response.Write("Browser = " & browser.Browser);
Response.Write("Version = " & browser.Version);
Response.Write("Platform = " & browser.Platform);
ASP での取得の場合は、大文字小文字を区別しないようですので、たとえば "isMobileDevice" であれば、そのまま browser.isMobileDevice といった形で取得することが可能です。
browscap データファイルの更新について
今回ダウンロードしてセットした "php_browscap.ini" ファイルは、新しいブラウザや機種が登場する都度、頻繁に更新される感じです。
そのため、新しいものに差し替えて行かないと、とくに携帯か PC かでページを分けるために使用している場合には、新しい携帯電話を正しく判定できないことが出てきてしまうので、その辺りにも気を配って運用を行う必要がありそうでした。
ただ、新バージョンが提供されているかを調べて差し替えるのもなかなか手間なので、それを自動化するためのスクリプトを作成して、サーバーに設定しておくのも良いかもしれません。
その辺りについては browscap のデータファイルを自動的に更新する の方で記してみましたので、興味があればそちらも参考にしてみてください。