代码之家  ›  专栏  ›  技术社区  ›  prosseek

用PHP实现操作系统的远程检测

php
  •  2
  • prosseek  · 技术社区  · 14 年前

    6 回复  |  直到 14 年前
        1
  •  4
  •   Thariama    14 年前

    user-agent头可能会显示一些操作系统信息,但我不指望。

    对于您的用例,我将从客户端使用javascript进行ajax调用,以通知您的服务器客户端的操作系统。

    下面是一个例子。

    Javascript(客户端、浏览器检测+ajax调用): detection script from here )

    window.addEvent('domready', function() { 
      if (BrowserDetect) { 
        var q_data = 'ajax=true&browser=' + BrowserDetect.browser + '&version=' + BrowserDetect.version + '&os=' + BrowserDetect.OS; 
        var query = 'record_browser.php' 
        var req = new Request.JSON({url: query, onComplete: setSelectWithJSON, data: q_data}).post(); 
      } 
    }); 
    

    if ($_SERVER['REQUEST_METHOD'] == 'POST') { 
        $session = session_id(); 
        $user_id = isset($user_id) ? $user_id ? 0; 
        $browser = isset($_POST['browser']) ? $_POST['browser'] ? ''; 
        $version = isset($_POST['version']) ? $_POST['version'] ? ''; 
        $os = isset($_POST['os']) ? $_POST['os'] ? ''; 
    
        // now do here whatever you like with this information
    } 
    
        2
  •  2
  •   Confluence    14 年前

    您可以查看用户代理标头( $_SERVER['HTTP_USER_AGENT']

    Mozilla/5.0(iPhone;U;CPU) iPhone操作系统 3_0 如Mac OS X;en us) AppleWebKit/420.1(KHTML,比如Gecko)

    Windows XP可能看起来像:

    Mozilla/5.0(Windows;U; Windows NT ;en-US;rv:1.9.2.10)壁虎/20100914火狐/3.6.10

    here . 你也可以使用 get_browser() (你需要 browscap 尽管如此)

    请注意,此标头很容易被伪造,因此不应用于任何关键任务。

        3
  •  1
  •   Quentin    14 年前

    不可靠? $_SERVER['HTTP_USER_AGENT'] 通常包含操作系统信息。

        4
  •  1
  •   Ahosan Karim Asik    10 年前
        function getBrowser()
        {
            $u_agent = $_SERVER['HTTP_USER_AGENT'];
            $bname = 'Unknown';
            $platform = 'Unknown';
            $version= "";
    
            //First get the platform?
            if (preg_match('/linux/i', $u_agent)) {
                $platform = 'linux';
            }
            elseif (preg_match('/macintosh|mac os x/i', $u_agent)) {
                $platform = 'mac';
            }
            elseif (preg_match('/windows|win32/i', $u_agent)) {
                $platform = 'windows';
            }
    
            // Next get the name of the useragent yes seperately and for good reason
            if(preg_match('/MSIE/i',$u_agent) && !preg_match('/Opera/i',$u_agent))
            {
                $bname = 'Internet Explorer';
                $ub = "MSIE";
            }
            elseif(preg_match('/Firefox/i',$u_agent))
            {
                $bname = 'Mozilla Firefox';
                $ub = "Firefox";
            }
            elseif(preg_match('/Chrome/i',$u_agent))
            {
                $bname = 'Google Chrome';
                $ub = "Chrome";
            }
            elseif(preg_match('/Safari/i',$u_agent))
            {
                $bname = 'Apple Safari';
                $ub = "Safari";
            }
            elseif(preg_match('/Opera/i',$u_agent))
            {
                $bname = 'Opera';
                $ub = "Opera";
            }
            elseif(preg_match('/Netscape/i',$u_agent))
            {
                $bname = 'Netscape';
                $ub = "Netscape";
            }
    
            // finally get the correct version number
            $known = array('Version', $ub, 'other');
            $pattern = '#(?<browser>' . join('|', $known) .
            ')[/ ]+(?<version>[0-9.|a-zA-Z.]*)#';
            if (!preg_match_all($pattern, $u_agent, $matches)) {
                // we have no matching number just continue
            }
    
            // see how many we have
            $i = count($matches['browser']);
            if ($i != 1) {
                //we will have two since we are not using 'other' argument yet
                //see if version is before or after the name
                if (strripos($u_agent,"Version") < strripos($u_agent,$ub)){
                    $version= $matches['version'][0];
                }
                else {
                    $version= $matches['version'][1];
                }
            }
            else {
                $version= $matches['version'][0];
            }
    
            // check if we have a number
            if ($version==null || $version=="") {$version="?";}
    
            return array(
                'userAgent' => $u_agent,
                'name'      => $bname,
                'version'   => $version,
                'platform'  => $platform,
                'pattern'    => $pattern
            );
        }
    
    var_dump(getBrowser());
    

    查看详细信息 enter link description here

        5
  •  0
  •   Esteban    14 年前

    get_browser 函数将为您解析$\u SERVER['HTTP\u USER\u AGENT']。你需要浏览CAP.ini不过。

        6
  •  0
  •   Michael Clerx    14 年前

    与其自己实现,我宁愿尝试使用现有的软件,比如 Browser.php 为您解析用户代理字符串。你需要考虑的小事情太多了,最好使用一个专门的库,而不是自己去学习所有这些平台/浏览器不一致的地方。