2014-11-01 231 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); 
?>