ナイスなUser-Agent判定をしてくれるPHP関数

| | Comments (4) | TrackBacks (0)

あるウェブサービスのユーザが、
「どういう環境でサービスを利用しているか」
を判別する厳密な方法は存在しない。
...しないのだけれど、
ユーザの環境に合せてサービスを変更しないと
マズいシチュエーションも多々存在し (OSやBrowserのバグのため)、
そういう場合はUser-Agent を調べてサーバサイドの処理を変えていくことになる。


User-Agent の解釈は正規表現で行うことが多い(と思う)けれど、
PHP の場合はメンテナンスされたbrowscap を利用することで、
かなり厳密にユーザの環境を特定できる。
(...というのを、つい最近知った。
あと、他の言語のことを知らないだけでbrowscap 自体は汎用的なものかも)


browscap : http://browsers.garykeith.com/downloads.asp から取得可能
(?? 現在アクセス不可)


; @php.ini
browscap = /PATH/TO/BROWSCAP


のような設定をした上で、


<?php
// $sample = $_SERVER['HTTP_USER_AGENT'];
$sample = "Mozilla/5.0 (Windows; U; Windows NT 5.1; ja; rv:1.8.0.7) Gecko/20060909 Firefox/1.5.0.7";

$browser = get_browser($sample, true);

var_dump($browser);
?>


みたいなソースを実行すると、


$ php browscap.php
array(26) {
["browser_name_regex"]=>
string(68) "^mozilla/5\.0 (windows; .; windows nt 5\.1; .*; rv:1\.8.*) gecko/.*$"
["browser_name_pattern"]=>
string(60) "Mozilla/5.0 (Windows; ?; Windows NT 5.1; *; rv:1.8*) Gecko/*"
["parent"]=>
string(11) "Mozilla 1.8"
["platform"]=>
string(5) "WinXP"
["browser"]=>
string(7) "Mozilla"
["version"]=>
string(3) "1.8"
["majorver"]=>
string(1) "1"
["minorver"]=>
string(1) "8"
["css"]=>
string(1) "2"
["frames"]=>
string(1) "1"
["iframes"]=>
string(1) "1"
["tables"]=>
string(1) "1"
["cookies"]=>
string(1) "1"
["backgroundsounds"]=>
string(0) ""
["vbscript"]=>
string(0) ""
["javascript"]=>
string(1) "1"
["javaapplets"]=>
string(1) "1"
["activexcontrols"]=>
string(0) ""
["cdf"]=>
string(0) ""
["aol"]=>
string(0) ""
["beta"]=>
string(1) "1"
["win16"]=>
string(0) ""
["crawler"]=>
string(0) ""
["stripper"]=>
string(0) ""
["wap"]=>
string(0) ""
["netclr"]=>
string(0) ""
}


というような結果が返る。
ここから、各々の環境を調べるのが最も誤差がない方法に思える。


参考:get_browser (PHPマニュアル)

0 TrackBacks

Listed below are links to blogs that reference this entry: ナイスなUser-Agent判定をしてくれるPHP関数.

TrackBack URL for this entry: http://mahata.net/movabletype/mt-tb.cgi/2761

4 Comments

そんな関数あったんですね。
全然知りませんでした。crawler避けとかにも使えそうですね。

> crawler避けとかにも使えそう

ウェブに転がっているbrowscap.ini を見た感じだと、
かなりマニアックなcrawler のUser-Agent情報も書かれてるっぽいので、
確かにそういう用途でもいけそうっすね。


なるほどー。

すごい。DoCoMoとかKDDIとかもはいってるのね。いいかも。

むしろ海外の携帯っぽいUser-Agentが全然わかんないっす...

Leave a comment

About this Entry

This page contains a single entry by mahata published on March 4, 2007 5:48 PM.

君たちにいいニュースがある was the previous entry in this blog.

Yahoo!地図情報API is the next entry in this blog.

Find recent content on the main index or look in the archives to find all content.