利用者:Marine-Blue/ブラウザチェッカー
出典: フリー教科書『ウィキブックス(Wikibooks)』
使用しているブラウザの名前と系統、オペレーティングシステム、JavaScriptの有効無効を調べるPHPのプログラム。Wikipedia:使用性改善のような場所で利用環境を提示してもらうために作ってみた。
※ただし現在、まともに使う用事なし
目次 |
[編集] 機能概要
- 取得する情報はHTTP_USER_AGENTのみ
- IEコンポーネントブラウザはその名前とIEのバージョンを取得して表示(例:IE7環境のSleipnirであれば Sleipnir (Internet Explorer 7.0) と表示される)
- WebKit系ブラウザは名前とバージョン、対応するSafariのバージョンを取得して表示(例:Google Chromeの5.0であれば Google Chrome 5.0 (Safari 5.0) と表示される)
- 系統を判別する目的があるため、ブラウザのバージョンは大まかな情報のみ取得(例:Firefox 3.5.1であればFirefox 3.5)
- ひたすら事例別に叩いて判別を行う
- パターンを増やすことで対応ブラウザやオペレーティングシステムを増やせる
- UAにブラウザ固有の情報を含まないブラウザは判別不可能(IEコンポーネントブラウザの一部やLunascape 3.0のGeckoなど)
- JavaScriptの状態判別のみJavaScriptに依存
[編集] 実行サンプル
※個人で所有しているサーバーに設置しています。Wikibooksとは直接関係がないので注意してください。
[編集] ソースコード
[編集] JavaScript部分
window.onload = function () { // JavaScriptの有効を判定する var area = document.getElementById("info"); area.value = area.value.replace(/無効または使用不可/,"有効"); }
[編集] PHP部分
<? // HTTP_USER_AGENTの情報を取得する // この情報を元に条件分岐を行う $ua = $_SERVER['HTTP_USER_AGENT']; // IEコンポーネント系はブラウザのバージョンを調べず名前だけ調べる // 使用しているIEのバージョンは最後にチェックする if(strstr($ua,"Sleipnir")) { $browser = "Sleipnir"; } elseif(strstr($ua,"Grani")) { $browser = "Grani"; } elseif(strstr($ua,"ScriptBrowser")) { $browser = "ScriptBrowserK"; } elseif(strstr($ua,"Maxtorn")) { $browser = "Maxtorn"; } elseif(strstr($ua,"Lunascape")) { // Lunascapeのブラウザエンジンはいずれもデフォルト使用を想定した設計になっている // このためTrident以外を正式利用するケースを想定し、ブラウザエンジン別に調べる if(strstr($ua,"MSIE")) { // Tridentのバージョンは最後にチェックするため省略 $browser = "Lunascape Tridentエンジン"; } elseif(strstr($ua,"Gecko/")) { // バージョン6以降はFirefoxのバージョンを調べる if(strstr($ua,"Firefox/")) { $moz = strpos($ua,"Firefox/") + 8; $ver = "Firefox ".substr($ua,$moz,3); } // バージョン5以前はGeckoのバージョンを調べる elseif(strstr($ua,"rv:")) { $moz = strpos($ua,"rv:") + 3; $ver = "Mozilla ".substr($ua,$moz,3); } // 誤爆回避用 else { $ver = "バージョン不明"; } $browser = "Lunascape Geckoエンジン ({$ver})"; } elseif(strstr($ua,"WebKit")) { // WebKitのバージョンは最後にチェックするため省略 $browser = "Lunascape WebKitエンジン"; } } // Firefox不完全偽装を見抜くため、Firefoxより前でOperaを判定する // Operaは最新版と旧版のバージョン表記が異なるので、条件分岐を行う elseif(strstr($ua,"Opera")) { if(strstr($ua,"Presto/") && strstr($ua,"Version/")) { $op = strpos($ua,"Version/") + 8; } else { $op = strpos($ua,"Opera") + 6; } $ver = substr($ua,$op,3); // 小数点の位置から桁数を判別、10以上であれば取得のやり直し if(substr($ver,2,1) == ".") { $ver = substr($ua,$op,4); } $browser = "Opera {$ver}"; } // Gecko系は固有名の後ろにある数字を抜き出す elseif(strstr($ua,"SeaMonkey")) { $moz = strpos($ua,"SeaMonkey/") + 10; $ver = substr($ua,$moz,3); $browser = "SeaMonkey {$ver}"; } elseif(strstr($ua,"Camino/")) { $moz = strpos($ua,"Camino/") + 7; $ver = substr($ua,$moz,3); $browser = "Camino {$ver}"; } elseif(strstr($ua,"Minefield/")) { $moz = strpos($ua,"Minefield/") + 10; $ver = substr($ua,$moz,3); $browser = "Firefox {$ver} (trunk)"; } elseif(strstr($ua,"Firefox/")) { $moz = strpos($ua,"Firefox/") + 8; $ver = substr($ua,$moz,3); $browser = "Firefox {$ver}"; } // 誤爆回避用にNetscapeを判別する // 使う人が殆どいないので、バージョンはいちいち調べない elseif(strstr($ua,"Netscape6/") || strstr($ua,"Netscape/") || strstr($ua,"Navigator/")) { $browser = "Netscape"; } // 系統不明なGecko系はMozilla系として扱う elseif(strstr($ua,"Gecko/")) { $moz = strpos($ua,"rv:") + 3; $ver = substr($ua,$moz,3); $browser = "不明 (Mozilla {$ver})"; } // WebKit系はバージョン情報を抜き出す // 最後に対応するSafariのバージョンも付加する elseif(strstr($ua,"Chrome/")) { $wkt = strpos($ua,"Chrome/") + 7; $ver = substr($ua,$wkt,3); $browser = "Google Chrome {$ver}"; } elseif(strstr($ua,"ChromePlus/")) { $wkt = strpos($ua,"ChromePlus/") + 11; $ver = substr($ua,$wkt,3); $browser = "ChromePlus {$ver}"; } elseif(strstr($ua,"Chronium/")) { $wkt = strpos($ua,"Chronium/") + 9; $ver = substr($ua,$wkt,3); $browser = "Chronium {$ver}"; } elseif(strstr($ua,"Shiira")) { $wkt = strpos($ua,"Shiira/") + 7; $ver = substr($ua,$wkt,3); $browser = "Shiira {$ver}"; } elseif(strstr($ua,"OmniWeb")) { $wkt = strpos($ua,"OmniWeb/") + 8; $ver = substr($ua,$wkt,3); $browser = "OmniWeb {$ver}"; } // KHTML系はバージョンのみ調べる elseif(strstr($ua,"Konqueror")) { $wkt = strpos($ua,"Konqueror/") + 10; $ver = substr($ua,$wkt,3); $browser = "Konqueror {$ver}"; } elseif(strstr($ua,"Epiphany")) { $browser = "Epiphany"; } // KHTML系の不明ブラウザ elseif(strstr($ua,"KHTML")) { $browser = "不明 (KHTML)"; } // いずれにも該当なし else { $browser = "不明"; } // WebKitバージョン判定 if(strstr($ua,"Safari")) { // WebKit系ブラウザはSafariのどれに該当するか調べる // ユーザーエージェントにバージョンが書いてある場合 if(strstr($ua,"Version/")) { $wkt = strpos($ua,"Version/") + 8; $ver = substr($ua,$wkt,3); } // バージョンを取得できないときはWebKitのビルドを調べる else { $wkt = strpos($ua,"Safari/") + 7; $wkv = substr($ua,$wkt,5); // 条件文でビルド番号に対応するSafariのバージョンを調べる // 2.0以下は面倒だから判定しない if($wkv >= 533.27) { $ver = "5.0"; } elseif($wkv >= 533.16) { $ver = "4.1"; } elseif($wkv >= 530.17) { $ver = "4.0"; } elseif($wkv >= 525.27) { $ver = "3.2"; } elseif($wkv >= 525.13) { $ver = "3.1"; } elseif($wkv >= 522.12) { $ver = "3.0"; } else { $ver = "(WebKit {$wkv})"; } } // UAにSafariの文字列を含む不明ブラウザはSafariとして判定する if($browser == "不明 (KHTML)") { $browser = "Safari {$ver}"; } // Safariのバージョンを取得しなかった場合 elseif(strstr($ver,"WebKit")) { $browser = " {$ver}"; } // Safari以外のWebKit系ブラウザは名前+対応するSafariのバージョン else { $browser .= " (Sarafi {$ver})"; } } // 系統不明時の対策 elseif(strstr($ua,"WebKit/")) { $wkt = strpos($ua,"WebKit/") + 7; $ver = substr($ua,$wkt,3); $browser = "不明 (WebKit {$ver})"; } // IEコンポーネントバージョン判定 if(strstr($ua,"MSIE") && !strstr($ua,"Opera")) { // OperaのUA偽装対策 // IEのバージョンを調べる $wie = strpos($ua,"MSIE") + 5; $ie = "Internet Explorer ".substr($ua,$wie,3); // IEコンポーネントブラウザに該当がなく、UAにMSIEを含むブラウザはIEとみなす if($browser == "不明") { $browser = $ie; } // IE単体でない場合は名前+使用しているIEのバージョン else { $browser .= " ({$ie})"; } } // OSの種類を調べる if(strstr($ua,"Win95")) { $os = "Windows 95"; } elseif(strstr($ua,"Win98")) { $os = "Windows 98"; } elseif(strstr($ua,"WinME")) { $os = "Windows ME"; } elseif(strstr($ua,"WinNT")) { $os = "Windows NT"; } elseif(strstr($ua,"Windows NT 5.0")) { $os = "Windows 2000"; } elseif(strstr($ua,"Windows NT 5.1")) { $os = "Windows XP"; } elseif(strstr($ua,"Windows NT 6.0")) { $os = "Windows Vista"; } elseif(strstr($ua,"Windows NT 6.1")) { $os = "Windows 7"; } elseif(strstr($ua,"Android")) { $os = "Android"; } elseif(strstr($ua,"iPod")) { $os = "iPod touch"; } elseif(strstr($ua,"iPad")) { $os = "iPad"; } elseif(strstr($ua,"iPhone")) { $os = "iPhone OS"; } elseif(strstr($ua,"Mac OS X")) { $os = "Mac OS X"; } elseif(strstr($ua,"Intel")) { $os = "Mac OS X"; } elseif(strstr($ua,"Mac OS")) { $os = "Mac OS"; } elseif(strstr($ua,"PPC")) { $os = "Mac OS"; } elseif(strstr($ua,"Power PC")) { $os = "Mac OS"; } elseif(strstr($ua,"Linux")) { $os = "Linux"; } elseif(strstr($ua,"UNIX")) { $os = "UNIX"; } elseif(strstr($ua,"Wii")) { $os = "Wii"; } elseif(strstr($ua,"Nitro")) { $os = "Nintendo DS"; } elseif(strstr($ua,"PSP")) { $os = "PlayStation Portable"; } elseif(strstr($ua,"PS2")) { $os = "PlayStation 2"; } elseif(strstr($ua,"PS3")) { $os = "PlayStation 3"; } elseif(strstr($ua,"DoCoMo")) { // 端末の種類+判定結果+UAでブラウザを判別 if($browser == "不明" && strstr($ua,"W") && strstr($ua,"H")) { $browser = "iモードブラウザ"; } $os = "DoCoMo携帯"; } elseif(strstr($ua,"KDDI")) { // KDDIとMMPを含めばOpenwame使用 if($browser == "不明" && strstr($ua,"MMP")) { $browser = "Openwave"; } // KDDIとOperaを含めばPCサイトビューア elseif(strstr($browser,"Opera")) { $browser .= " (PCサイトビューア)"; } $os = "au携帯"; } elseif(strstr($ua,"SoftBank")) { // ブラウザの名称が分からないためそのまま $os = "SoftBank携帯"; } else { $os = "不明"; } print "ブラウザ情報<br />\n"; print "<textarea cols=\"50\" rows=\"5\" id=\"info\">* ブラウザ:$browser\n"; print "* オペレーティングシステム:$os\n"; print "* JavaScriptの状態:無効または使用不可</textarea>"; ?>