【问题标题】:Get users OS and version number获取用户操作系统和版本号
【发布时间】:2011-03-27 09:26:36
【问题描述】:

为此我花了一天时间在谷歌上搜索;到目前为止没有运气。

如何获取用户操作系统和版本。我的是 Mac OS X 10.6.4,办公室的备用 PC 是 Windows XP SP3。你明白我在说什么。

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

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

【问题讨论】:

  • 请记住,永远不要相信来自客户的任何东西。因此,即使您“检测到”OS X 10.6.4,您也不知道这是否正确……

标签: javascript php os-detection


【解决方案1】:

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

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

干杯。

【讨论】:

    【解决方案2】:

    除了进行网络探测(无论如何都不太可靠)之外,您唯一的提示是检查 User-Agent 标头,但您也不能过分依赖它,因为任何人都可以修改默认值他的浏览器发送的标头。

    【讨论】:

      【解决方案3】:

      【讨论】:

      • 不幸的是,我们服务器上的 browscap.ini 文件(实际上都是专用的盒子)还不够新。 =/
      【解决方案4】:

      您可以使用 $_SERVER 数组中的 HTTP_USER_AGENT 字段。例如,以下代码将检测 iPhone 和 Android 用户并将他们重定向到不同的位置(例如,iTunes App Store 或 Android Marketplace):

      $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 定义的常量。

      【讨论】:

        【解决方案5】:
        <?php
        
        $user_agent     =   $_SERVER['HTTP_USER_AGENT'];
        
        function getOS() { 
        
        global $user_agent;
        
        $os_platform    =   "Unknown OS Platform";
        
        $os_array       =   array(
            '/windows nt 10.0/i'    =>  'Windows 10',
            '/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']."");
        
        ?>
        

        【讨论】:

        • Chrome 浏览器会失败,不是吗? Chrome 在其用户代理上同时具有“Safari”和“Chrome”。例如:Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1625.2 Safari/537.36
        • @Gaurang 这个脚本对我很有帮助。关于它的一个问题:我使用 OS X Mavericks,它返回“未知操作系统平台”。知道为什么以及如何解决这个问题吗?
        • 我知道这个答案已经有 7 年历史了,但是如果您接受用户代理作为函数变量而不是将其指定为全局变量会更好,那么它可以为任何用户代理返回它.或者只是使用函数内部的 $_SERVER 变量,因为它已经是一个全局变量?
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-01-19
        • 2020-03-01
        • 1970-01-01
        • 2011-02-15
        • 2010-10-08
        • 1970-01-01
        相关资源
        最近更新 更多