2009年3月26日木曜日

PHPでブラウザ判別(get_browser() & Net_User_Agent_Detect)

PHPにはブラウザ判別に利用できるget_browser()という組込み関数が標準で用意されている。
ただ、そのままの環境では使えないので、事前にいくつか用意が必要なのでメモ。


(その1)
Browser Capabilities Projectphp_browscap.iniをダウンロードして、サーバに配置。
(その2)
php.iniに以下を追記
-----ここから-----
[browscap]
browscap =/path/to/php_browscap.ini
-----ここまで-----

php.inではなく、.htaccessで以下のように記述しても動かないので注意。
-----ここから-----
php_value browscap /path/to/php_browscap.ini
-----ここまで-----

(その3)
HTTPサーバを再起動

PHPサンプル
-----ソース-----

<?php
$platform = get_browser(null, true);
print_r($platform);
?>


-----ここまで-----

----出力-----

Array
(
[browser_name_regex] => ^mozilla/5\.0 (windows; u; windows nt 5\.1; .*) applewebkit/.* (khtml, like gecko) chrome/1\.0\..* safari/.*$
[browser_name_pattern] => Mozilla/5.0 (Windows; U; Windows NT 5.1; *) AppleWebKit/* (KHTML, like Gecko) Chrome/1.0.* Safari/*
[parent] => Chrome 1.0
[platform] => WinXP
[browser] => Chrome
[version] => 1.0
[majorver] => 1
[win32] => 1
[frames] => 1
[iframes] => 1
[tables] => 1
[cookies] => 1
[javaapplets] => 1
[javascript] => 1
[cssversion] => 3
[supportscss] => 1
[minorver] => 0
[alpha] =>
[beta] =>
[win16] =>
[win64] =>
[backgroundsounds] =>
[cdf] =>
[vbscript] =>
[activexcontrols] =>
[isbanned] =>
[ismobiledevice] =>
[issyndicationreader] =>
[crawler] =>
[aol] =>
[aolversion] => 0
)

-----ここまで------

ちゃんとChromeの判別ができてる。最近入れたIE8ちゃんと判別してた。

php.iniを利用できない場合は、Net_User_Agent_Detectというモジュールで判別できそう。

使い方はこんな感じ。
-----ここから---
<?php
require_once("Net/UserAgent/Detect.php");
echo Net_UserAgent_Detect::getBrowserString();
echo Net_UserAgent_Detect::getOSString();
?>

---ここまで---
get_browser()とく比較すると情報量が圧倒的に少ないけど、php.iniを編集できる環境じゃない場合は、ブラウザとプラットフォーム取得くらいは使えそう。

0 件のコメント: