PHP обнаруживает Opera - PullRequest
       9

PHP обнаруживает Opera

0 голосов
/ 27 апреля 2011

Как я могу обнаружить Opera с PHP? Я использую лайтбокс с drupal, и это ошибка в опере, поэтому, если сайт просматривается в опере, я хочу напечатать обычную ссылку вместо лайтбокса.

Я нашел эту ссылку, но она просто говорит «другой браузер», а не опера: http://drupal.org/node/65903

Это печатает используемый браузер и, кажется, работает нормально:

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

Так можно ли изменить код для печати, если браузер работает в Opera? Если да, то какая-нибудь яма подпадает под этот метод?

Спасибо

Ответы [ 3 ]

2 голосов
/ 27 апреля 2011

Проверьте эту ссылку . Внизу в комментариях кто-то разместил следующий код:

<?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 голосов
/ 27 апреля 2011

Да, вы можете изменить код.Просто используйте то, что дает вам Opera за $_SERVER['HTTP_USER_AGENT'], чтобы внести правильные изменения.

Что касается ловушек, помните, что люди могут сменить своего агента пользователя.Некоторые приложения также изменят пользовательский агент вашего браузера.Таким образом, прослушивание пользовательского агента не является верным способом гарантировать совместимость ... на самом деле, вам лучше будет проверить определенные возможности браузера во внешнем интерфейсе , чем проверять на стороне сервера.Но если вы застряли, делая это в PHP, вы на правильном пути.

0 голосов
/ 27 апреля 2011

Вы можете попробовать использовать http://chrisschuld.com/projects/browser-php-detecting-a-users-browser-from-php/,, это похоже на полезный скрипт, однако, если введенный вами PHP-код повторяет что-то, что вы можете использовать для изменения способа отображения ссылки, тогда это может быть хорошо.Единственное, что вы должны использовать не слишком строгое сравнение, а не строгое, потому что пользовательские агенты Opera могут меняться в зависимости от версии или операционной системы.

...