2010-08-09 90 views
9

我已经在Googeling度过了一天,到目前为止没有运气。获取用户操作系统和版本号

如何获取用户的操作系统和版本。我会把我的Mac OS X 10.6.4,在办公室的备用电脑将Windows XP SP3。你看到我在做什么。

我见过有一百万种方法来获取用户平台,而不是版本。

JS是理想的,但服务器端(PHP)解决方案也可以。

+3

只要记住,永远不要相信客户的任何信息。因此,即使您“检测到”OS X 10.6.4,您也不知道这是否正确... – ircmaxell 2010-08-09 16:23:18

回答

1

您将看到的所有服务器端解决方案都将归结为在请求中使用User-Agent字符串。

在客户端(JS)做的工作有能够直接与浏览器/操作系统交互的好处。例如,jQuery's browser function - 这可能正是您所需要的 - 在DOM /浏览器上运行一系列测试,以查看它如何反应,然后根据这些反应确定浏览器类型和版本。已经有一些项目扩展了jQuery的浏览器功能以包含操作系统检测,但我之前没有使用它们;通过快速的Google搜索轻松找到。

干杯。

1

除了做一个网络探测器,它不是太可靠,唯一的提示是检查User-Agent头,但是你也不能太依赖它,因为任何人都可以修改它他的浏览器发送的默认标题。

2

下面的链接似乎有javascript检测操作系统的代码 - 在底部。作为奖励,它还有其他一些功能,例如浏览器类型和版本检测。

http://www.quirksmode.org/js/detect.html

HTH

+0

在我的Mac上,'navigator.oscpu'在个人电脑上返回'Intel Mac OS X 10.6',它不会返回任何内容。耻辱,因为这正是我想要的! – PaulAdamDavis 2010-08-10 12:45:42

3

可以使用$ _SERVER数组中的HTTP_USER_AGENT领域。例如,下面的代码将检测iPhone和Android用户重定向到一个不同的位置(例如,iTunes App Store或Android市场):

$http_user_agent = $_SERVER['HTTP_USER_AGENT']; 

if (stristr($http_user_agent, "android") != FALSE) { 
    header("Location: " . ANDROID_REDIRECT); 
} 
else if (stristr($http_user_agent, "iphone") != FALSE) { 
    header("Location: " . IOS_REDIRECT); 
} 
else { 
    header("Location: " . DEFAULT_REDIRECT); 
} 

注意ANDROID_REDIRECT,IOS_REDIRECT和DEFAULT_REDIRECT与定义的常量PHP 'define' function

19
<?php 

$user_agent  = $_SERVER['HTTP_USER_AGENT']; 

function getOS() { 

    global $user_agent; 

    $os_platform = "Unknown OS Platform"; 

    $os_array  = array(
          '/windows nt 6.2/i'  => 'Windows 8', 
          '/windows nt 6.1/i'  => 'Windows 7', 
          '/windows nt 6.0/i'  => 'Windows Vista', 
          '/windows nt 5.2/i'  => 'Windows Server 2003/XP x64', 
          '/windows nt 5.1/i'  => 'Windows XP', 
          '/windows xp/i'   => 'Windows XP', 
          '/windows nt 5.0/i'  => 'Windows 2000', 
          '/windows me/i'   => 'Windows ME', 
          '/win98/i'    => 'Windows 98', 
          '/win95/i'    => 'Windows 95', 
          '/win16/i'    => 'Windows 3.11', 
          '/macintosh|mac os x/i' => 'Mac OS X', 
          '/mac_powerpc/i'  => 'Mac OS 9', 
          '/linux/i'    => 'Linux', 
          '/ubuntu/i'    => 'Ubuntu', 
          '/iphone/i'    => 'iPhone', 
          '/ipod/i'    => 'iPod', 
          '/ipad/i'    => 'iPad', 
          '/android/i'   => 'Android', 
          '/blackberry/i'   => 'BlackBerry', 
          '/webos/i'    => 'Mobile' 
         ); 

    foreach ($os_array as $regex => $value) { 

     if (preg_match($regex, $user_agent)) { 
      $os_platform = $value; 
     } 

    } 

    return $os_platform; 

} 

function getBrowser() { 

    global $user_agent; 

    $browser  = "Unknown Browser"; 

    $browser_array = array(
          '/msie/i'  => 'Internet Explorer', 
          '/firefox/i' => 'Firefox', 
          '/safari/i'  => 'Safari', 
          '/chrome/i'  => 'Chrome', 
          '/opera/i'  => 'Opera', 
          '/netscape/i' => 'Netscape', 
          '/maxthon/i' => 'Maxthon', 
          '/konqueror/i' => 'Konqueror', 
          '/mobile/i'  => 'Handheld Browser' 
         ); 

    foreach ($browser_array as $regex => $value) { 

     if (preg_match($regex, $user_agent)) { 
      $browser = $value; 
     } 

    } 

    return $browser; 

} 


$user_os  = getOS(); 
$user_browser = getBrowser(); 

$device_details = "<strong>Browser: </strong>".$user_browser."<br /><strong>Operating System: </strong>".$user_os.""; 

print_r($device_details); 

echo("<br /><br /><br />".$_SERVER['HTTP_USER_AGENT'].""); 

?> 
+0

Chrome浏览器会失败,不是吗? Chrome在其用户代理上同时拥有'Safari'和'Chrome'。例如:'Mozilla/5.0(Windows NT 6.1)AppleWebKit/537.36(KHTML,像Gecko)Chrome/31.0.1625.2 Safari/537.36' – RaphaelDDL 2013-09-09 14:43:24

+0

@Gaurang这段脚本真的帮了我很大忙。关于它的一个问题:我使用OS X Mavericks,它返回“未知OS平台”。任何想法为什么以及如何解决这个问题? – 2014-05-19 12:21:48

相关问题