利用者: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>";
?>