【问题标题】:Easiest Way OS Detection With PHP?使用 PHP 进行操作系统检测的最简单方法?
【发布时间】:2010-11-05 09:16:02
【问题描述】:

我试图找出访问者的操作系统是 Windows、Mac 还是使用 PHP 的 Linux(我不需要版本、发行版信息等)。有几种方法,但是对于这个简单的要求来说它们看起来有点太复杂了。

是否有任何简单的方法可以提供此类信息但仍然相当可靠?

提前致谢。

【问题讨论】:

标签: php user-agent


【解决方案1】:
<?php

$agent = $_SERVER['HTTP_USER_AGENT'];

if(preg_match('/Linux/',$agent)) $os = 'Linux';
elseif(preg_match('/Win/',$agent)) $os = 'Windows';
elseif(preg_match('/Mac/',$agent)) $os = 'Mac';
else $os = 'UnKnown';


echo $os;

?>

【讨论】:

    【解决方案2】:

    如需简单的解决方案,请查看here。 用户代理标头可能会显示一些操作系统信息,但我不会指望这一点。

    对于您的用例,我会从客户端使用 javascript 进行 ajax 调用,以通知您的服务器客户端的操作系统。并且做到防水。

    这是一个例子。

    Javascript(客户端,浏览器检测 + ajax 调用):

    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(); 
      } 
    }); 
    

    PHP(服务器端):

    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
    } 
    

    【讨论】:

    • 看起来很可靠。但是我假设检测仅在页面加载后发生?
    • 如果没有页面加载,您将无法检索到比用户代理标题显示的更多内容。好吧,您可以在初始化会话时(在第一页加载时)保存用户操作系统,解决方法可能是在您检测到第一页上的操作系统后重定向到第二页。
    【解决方案3】:

    使用 Net_UserAgent 包

    文档在这里:http://pear.php.net/package/Net_UserAgent_Detect/docs/latest/Net_UserAgent/Net_UserAgent_Detect.html#methodgetOSString

    在此处获取 php 文件: 包/Net_UserAgent_Detect/docs/latest/__filesource/fsource_Net_UserAgent__Net_UserAgent_Detect-2.5.1Detect.php.html

    【讨论】:

      猜你喜欢
      • 2014-04-14
      • 2011-07-08
      • 2011-01-18
      • 1970-01-01
      • 2022-08-06
      • 2023-04-05
      • 1970-01-01
      • 1970-01-01
      • 2021-11-15
      相关资源
      最近更新 更多