Php 从浏览器中检测确切的操作系统版本
我想知道是否有一种方法可以使用PHP/JS/ASP从我的浏览器中检测出确切的操作系统版本Php 从浏览器中检测确切的操作系统版本,php,javascript,browser,Php,Javascript,Browser,我想知道是否有一种方法可以使用PHP/JS/ASP从我的浏览器中检测出确切的操作系统版本 我知道我可以检测操作系统的类型(Windows XP、Windows Vista、OS X等),但我需要检测准确的版本:Vista Business、Vista Ultimate、Windows XP Home、Windows XP Pro等。简短回答:你不能 长答案: 您所拥有的只是HTTP用户代理标头中的信息,该标头通常包含操作系统名称和版本 通常,运行在Mac OS和Linux上的浏览器会发送足够的信
我知道我可以检测操作系统的类型(Windows XP、Windows Vista、OS X等),但我需要检测准确的版本:Vista Business、Vista Ultimate、Windows XP Home、Windows XP Pro等。简短回答:你不能 长答案: 您所拥有的只是HTTP用户代理标头中的信息,该标头通常包含操作系统名称和版本 通常,运行在Mac OS和Linux上的浏览器会发送足够的信息来识别确切的操作系统。例如,下面是我的用户代理标题: Mozilla/5.0(X11;U;Linux x86_64;en-US;rv:1.9.0.7)Gecko/2009030423 Ubuntu/8.10(无畏)Firefox/3.0.7 你可以看到我正在运行Ubuntu8.10IntrepidIbex 以下是Firefox和Safari 4在我的MacBook Pro上的测试报告: Mozilla/5.0(Macintosh;U;Intel Mac OS X 10.5;en-US;rv:1.9.0.7)Gecko/2009021906 Firefox/3.0.7 Mozilla/5.0(Macintosh;U;Intel Mac OS X 10_5_6;en us)AppleWebKit/528.16(KHTML,类似Gecko)版本/4.0 Safari/528.16 另一方面,Windows浏览器通常只报告操作系统版本,而不报告特定的软件包(Pro、Business等): Mozilla/5.0(Windows;U;Windows NT 5.1;en-US;rv:x.x.x)Gecko/20041107 Firefox/x.x
我认为您无法区分不同版本的Vista,但您应该能够从对象的平台属性获取操作系统。不过,您可能需要对其进行解析,或者根据其内容进行区分
<script type="text/javascript">
alert( navigator.platform );
</script>
警报(navigator.platform);
有关如何获取导航器所有属性的说明,请参见教程
编辑:
要获得确切版本,您可以开发ActiveX控件(仅限Windows)或Java小程序,并使用Java.lang.System对象查看当前系统属性。对于非Windows系统,您可能能够从浏览器中获得足够的信息,并且只能在Windows系统中使用该控件。我还没有试过这个,所以你需要进行实验,看看它是否有效。我必须相信,Microsoft针对Microsoft Update的ActiveX控件能够检测准确的系统版本和安装的软件,以使其正常工作。除非web应用程序的功能绝对必要,否则您应该尽量避免这样做 请注意: 并非所有请求都可以来自windows上运行的客户端 并非所有请求都来自支持JavaScript的客户端 请求中可能不存在用户代理标头 用户代理标头中的内容可能有误
一个设计良好的web应用程序应该提供完整的内容和功能,而不管请求的用户代理头中有什么内容,或者客户端是否支持javascript或任何其他客户端扩展 正如其他人所说,不,不可靠
例如,这就是jquery切换到浏览器功能系统(因为没有更好的词)而不是浏览器嗅探系统以实现其功能的原因。在经典ASP和ASP.NET中使用
Request.ServerVariables("HTTP_USER_AGENT")
这是最有效的,因为它不是解释代码,这是在服务器上运行的。在谷歌搜索后,我发现了这段代码,它似乎工作正常,(但没有检测到Unix)
在CodeIgniter中,您可以找到名为“用户代理”的库。它会给你真正需要的一切。如果不使用CI,仍然可以“提取”框架的代码。希望有帮助。 //这将对您有所帮助
$uagent = $_SERVER['HTTP_USER_AGENT'] . "<br/>";
function os_info($uagent)
{
// the order of this array is important
global $uagent;
$oses = array(
'Win311' => 'Win16',
'Win95' => '(Windows 95)|(Win95)|(Windows_95)',
'WinME' => '(Windows 98)|(Win 9x 4.90)|(Windows ME)',
'Win98' => '(Windows 98)|(Win98)',
'Win2000' => '(Windows NT 5.0)|(Windows 2000)',
'WinXP' => '(Windows NT 5.1)|(Windows XP)',
'WinServer2003' => '(Windows NT 5.2)',
'WinVista' => '(Windows NT 6.0)',
'Windows 7' => '(Windows NT 6.1)',
'Windows 8' => '(Windows NT 6.2)',
'Windows 8.1' => '(Windows NT 6.3)',
'Windows 10' => '(Windows NT 10.0)',
'WinNT' => '(Windows NT 4.0)|(WinNT4.0)|(WinNT)|(Windows NT)',
'OpenBSD' => 'OpenBSD',
'SunOS' => 'SunOS',
'Ubuntu' => 'Ubuntu',
'Android' => 'Android',
'Linux' => '(Linux)|(X11)',
'iPhone' => 'iPhone',
'iPad' => 'iPad',
'MacOS' => '(Mac_PowerPC)|(Macintosh)',
'QNX' => 'QNX',
'BeOS' => 'BeOS',
'OS2' => 'OS/2',
'SearchBot' => '(nuhk)|(Googlebot)|(Yammybot)|(Openbot)|(Slurp)|(MSNBot)|(Ask Jeeves/Teoma)|(ia_archiver)'
);
$uagent = strtolower($uagent ? $uagent : $_SERVER['HTTP_USER_AGENT']);
foreach ($oses as $os => $pattern)
if (preg_match('/' . $pattern . '/i', $uagent))
return $os;
return 'Unknown';
}
echo os_info($uagent);
$uagent=$\u服务器['HTTP\u用户\u代理']。“
”;
操作系统信息功能($uagent)
{
//这个数组的顺序很重要
全球$uagent;
$oses=数组(
'Win311'=>'Win16',
“Win95'=>”(Windows 95)|(Win95)|(Windows|95)”,
“WinME'=>”(Windows 98)|(Win 9x 4.90)|(Windows ME)”,
“Win98'=>”(Windows 98)|(Win98)”,
“Win2000'=>”(Windows NT 5.0)|(Windows 2000)”,
“WinXP”=>“(Windows NT 5.1)|(Windows XP)”,
'WinServer2003'=>'(Windows NT 5.2)',
“WinVista'=>”(Windows NT 6.0),
“Windows 7'=>”(Windows NT 6.1),
'Windows 8'=>'(Windows NT 6.2)',
'Windows 8.1'=>'(Windows NT 6.3)',
“Windows 10'=>”(Windows NT 10.0),
“WinNT'=>”(Windows NT 4.0)|(WinNT4.0)|(WinNT)|(Windows NT)”,
“OpenBSD”=>“OpenBSD”,
“SunOS”=>“SunOS”,
“Ubuntu”=>“Ubuntu”,
“安卓”=>“安卓”,
“Linux'=>'(Linux)|(X11)”,
“iPhone”=>“iPhone”,
“iPad”=>“iPad”,
“MacOS”=>“(Mac_PowerPC)|(Macintosh)”,
“QNX”=>“QNX”,
“BeOS”=>“BeOS”,
'OS2'=>'OS/2',
“搜索机器人”=>“(nuhk)|(谷歌机器人)|(Yammybot)|(Openbot)|(Slurp)|(MSNBot)|(Ask Jeeves/Teoma)|(ia|U archiver)”
);
$uagent=strtolower($uagent?$uagent:$\u SERVER['HTTP\u USER\u AGENT');
foreach($os为$os=>$pattern)
if(preg_匹配('/'.$pattern.'/i',$uagent))
返回$os;
返回“未知”;
}
echo操作系统信息($uagent);
我创建了一个jquery函数,它可以实现这一点。通过这种方式,我们可以跟踪使用的所有操作系统
希望有人能从中得到帮助:
function find_os_version() {
var ua = navigator.userAgent.toLowerCase();
if (ua.indexOf("windows nt 5.0") != -1) {
return 'win2k';
}
if (ua.indexOf("windows nt 5.1") != -1) {
return 'winXP';
}
if (ua.indexOf("windows nt 6.0") != -1) {
return 'winVista';
}
if (ua.indexOf("windows nt 6.1") != -1) {
return 'win7';
}
if (ua.indexOf("windows nt 6.2") != -1) {
return 'win8';
}
}
这可能是最简单的方法: 从下载库 如果使用CI,请将Mobile_Detect.php放入“库”中,或仅包含它 在PHP中使用此代码
$detect = new Mobile_Detect();
// Get the version() of components.
$detect->version('iPad'); // 4.3 (float)
$detect->version('iPhone') // 3.1 (float)
$detect->version('Android'); // 2.1 (float)
$detect->version('Opera Mini'); // 5.0 (float)
尽管这个问题很古老,但我只是在回答: 试试看:
$this->agent->platform()
这将为您提供以下输出:Linux、Windows、OS-X等。
欲了解更多信息,请访问:
可能是通过Flash实现的?@Roy:可能吧,但我不会打赌。请注意,即使这样也不是万无一失的。例如,将用户代理字符串更改为报告其他内容非常简单
$detect = new Mobile_Detect();
// Get the version() of components.
$detect->version('iPad'); // 4.3 (float)
$detect->version('iPhone') // 3.1 (float)
$detect->version('Android'); // 2.1 (float)
$detect->version('Opera Mini'); // 5.0 (float)