2015-10-15 77 views
2

我在PHP documentation中找到了代碼。這似乎是一個不錯的和簡單的代碼,它可以檢測谷歌瀏覽器,Firefox,IE瀏覽器和Safari瀏覽器,但它無法檢測Opera。瀏覽器檢測PHP中未檢測到代碼Opera

OUTPUT in OPERA: 
Your browser: Google Chrome 45.0.2454.93 on windows reports: 
Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.93 Safari/537.36 OPR/32.0.1948.69 

需要幫助修改此代碼,以便它可以檢測歌劇。

<?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('/Trident/i',$u_agent)) 
     { // this condition is for IE11 
      $bname = 'Internet Explorer'; 
      $ub = "rv"; 
     } 
     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 
     // Added "|:" 
     $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); 
    ?> 

回答

3

它的一些變化後,現在的工作......

我改變了這部分....

elseif(preg_match('/Opera/i',$u_agent)) 
     { 
      $bname = 'Opera'; 
      $ub = "Opera"; 
     } 

elseif(preg_match('/OPR/i',$u_agent)) 
     { 
      $bname = 'Opera'; 
      $ub = "OPR"; 
     } 
0

只需使用文檔get_browser中給出的基本功能即可。

<?php 
echo $_SERVER['HTTP_USER_AGENT'] . "\n\n"; 

$browser = get_browser(null, true); 
print_r($browser); 
?> 

爲了這個工作,你browscap配置在php.ini中必須指向你的系統上的browscap.ini 文件的正確位置。

的browscap.ini不捆綁了PHP,你可以下載它here

+0

我在php.ini配置設置中檢查了browscap並且它已經配置好了,b rowscap.ini包含在php文件中。 [browscap] ; http://php.net/browscap browscap =「C:\ xampp \ php \ extras \ browscap.ini」 我在你提供的鏈接中下載了php_browscap.ini,並替換了原始的browscap.ini並重新配置了php設置但仍然沒有檢測歌劇,無論如何,我感謝您的幫助 – aabejero