【问题标题】:php detect browser version HTTP_USER_AGENTphp检测浏览器版本HTTP_USER_AGENT
【发布时间】:2014-12-28 19:38:35
【问题描述】:

我尝试检测浏览器版本,以检测当前浏览器是否是 Internet Explorer 版本优于或等于 8。 但是它似乎不起作用,我遇到了这个错误(在 Firefox 中,有时在 Google Chrome 中):

Undefined index: HTTP_USER_AGENT in

这是我的代码:

 preg_match('/MSIE (.*?);/', $_SERVER['HTTP_USER_AGENT'], $matches);
 if(count($matches)<2){
    preg_match('/Trident\/\d{1,2}.\d{1,2}; rv:([0-9]*)/', $_SERVER['HTTP_USER_AGENT'], $matches);
 }
 if (count($matches)>1){
    $version = $matches[1];
 } else {
    $version = 999;
 }

 if($version >= 9) {
    wp_enqueue_script('preloader');
 }

【问题讨论】:

  • 当你说有时我们说话的频率是多少时,这是在你的测试中还是在一般用法中?
  • 在 safari 上总是会发生错误。有时在谷歌浏览器上会出现......奇怪。
  • 你的 apache 在代理后面运行?如果你在 localhost 上尝试,结果是什么?
  • 我在 nginx 服务器上进行在线测试。在本地与 xampp 相同。
  • 你的PHP代码没问题,看来你的nginx配置有问题。

标签: php browser user-agent


【解决方案1】:
Undefined index: HTTP_USER_AGENT

此错误消息表明您正在处理的请求根本不包含 User-Agent 标头,因此 HTTP_USER_AGENT 键不存在于 $_SERVER 中。无法从 PHP 中找出涉及的浏览器,因为浏览器尚未识别自己。 (很可能它根本就不是网络浏览器。)

【讨论】:

    【解决方案2】:

    没有一个 get_browser 替代品输出我使用 Opera 或 Chrome 寻找的正确名称/版本组合。他们要么给出错误的名称,例如 Safari,而实际上它应该是 Chrome,如果 ua 字符串包含版本号,就像最新版本的 Chrome 和 Opera 一样,则会报告错误的号码。这是一个可以检查版本的功能。

    <?php
    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
        );
    } 
    
    // now try it
    $ua=getBrowser();
    $yourbrowser= "Your browser: " . $ua['name'] . " " . $ua['version'] . " on " .$ua['platform'] . " reports: <br >" . $ua['userAgent'];
    print_r($yourbrowser);
    ?>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-03-14
      • 2016-03-21
      • 1970-01-01
      • 2014-09-14
      • 2011-08-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多