2014-11-01 224 views
0

我尝试检测浏览器版本,以检测当前浏览器是否为Internet Explorer版本优于或等于8. 但它似乎不起作用,我得到了这个错误(在Firefox有时谷歌浏览器):php检测浏览器版本HTTP_USER_AGENT

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'); 
} 
+0

当你说有时候我们多频繁在说话,这是你的测试还是一般用法? Safari上的 – 2014-11-01 19:39:33

+0

始终出现错误。谷歌浏览器上的SOmetimes出现了......奇怪。 – freaky 2014-11-01 19:40:39

+0

你的apache运行在代理之后?如果你尝试使用本地主机,结果如何? – 2014-11-01 19:53:24

回答

1
Undefined index: HTTP_USER_AGENT 

这误码M消息表明您处理的请求根本不包含User-Agent标头,因此$_SERVER中不存在HTTP_USER_AGENT密钥。没有办法确定PHP涉及哪种浏览器,因为浏览器尚未确定其身份。 (很有可能它根本不是网络浏览器。)

0

没有一个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); 
?>