2011-04-27 78 views
0

如何使用PHP檢測Opera?即時通訊使用燈箱與Drupal和他們是一個歌劇的錯誤,所以如果該網站正在與歌劇觀看我想打印一個正常的鏈接,而不是燈箱。PHP檢測Opera

我發現這個鏈接,但它只是說,「其他瀏覽器不是Opera: http://drupal.org/node/65903

這將打印所使用的瀏覽器,似乎很好地工作:

<?php echo $_SERVER['HTTP_USER_AGENT']; ?> 

所以我可以修改代碼打印一些東西,如果瀏覽器是歌劇?如果是這樣,他們有沒有陷入這種方法?

感謝

+1

爲什麼不只是修復bug,而不是有特殊的服務器端瀏覽器的支持? – 2011-04-27 18:19:56

+0

您可以通過用'strstr'替換'strpos'來修復該代碼 - 特別是對於Opera來說。 – mario 2011-04-27 18:20:21

+1

我從來沒有使用它,但你可以嘗試['get_browser()'](http://php.net/manual/en/function.get-browser.php)。 – 2011-04-27 18:21:24

回答

0

你可以嘗試使用http://chrisschuld.com/projects/browser-php-detecting-a-users-browser-from-php/,它看起來像一個有用的腳本,但是,如果你輸入的PHP代碼呼應的東西,你可以用它來改變鏈接的呈現方式,則可能被罰款。唯一的問題是你應該使用一些鬆散的字符串比較,而不是嚴格的比較,因爲Opera的用戶代理可能在版本或操作系統之間改變。

+0

我發現這個鏈接,但它似乎矯枉過正。我只需要檢測Opera的所有版本,因爲大多數人都在使用最新的版本。謝謝 – Evans 2011-04-27 18:57:56

0

是的,你可以修改代碼。只需使用Opera爲您提供的$_SERVER['HTTP_USER_AGENT']即可進行正確的更改。

就陷阱而言,請記住人們可以更改他們的用戶代理。某些應用程序也會更改瀏覽器的用戶代理。因此,用戶代理嗅探並不是確保兼容性的絕對方式......實際上,您可以更好地檢查前端上的特定瀏覽器功能,而不是檢查服務器端。但是如果你堅持用PHP來做這件事,那你就走在正確的軌道上。

+0

對不起,新手問題,但我怎麼能寫這個PHP作爲條件打印的東西?謝謝 – Evans 2011-04-27 18:56:29

+0

'<?php if(condition){echo'你想要打印的東西'; }?>' – EAMann 2011-04-27 19:45:44

+0

在這種情況下,你知道爲什麼TheAdamGaskins方法不起作用嗎?謝謝 – Evans 2011-04-27 20:05:06

2

檢查this link。倒在評論中,有人發表了以下代碼:

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

所以,你可以這樣說:

$browser = getBrowser(); 
if($browser['name'] == "Opera") 
{ 
    echo "This is opera!"; 
} 
+0

如果我複製並粘貼代碼,則代碼會以文本形式顯示在頁面上。如果我添加打開和關閉php標籤,那麼頁面會在任何瀏覽器中搞砸。謝謝 – Evans 2011-04-27 18:55:03