Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/229.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 从浏览器中检测确切的操作系统版本_Php_Javascript_Browser - Fatal编程技术网

Php 从浏览器中检测确切的操作系统版本

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上的浏览器会发送足够的信

我想知道是否有一种方法可以使用PHP/JS/ASP从我的浏览器中检测出确切的操作系统版本


我知道我可以检测操作系统的类型(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)