PHP: tarayıcının adını almak

6 Cevap

Nasıl PHP kullanarak tarayıcı adını alabilirim? Ben bu basit olacağını düşündüm? Yapmam gereken tüm IE ve Firefox arasında ayrım olduğunu.

6 Cevap

if (strpos($_SERVER['HTTP_USER_AGENT'], '(compatible; MSIE ')!==FALSE) {
    ...ie specific...
}

Ama! Don't!

Sunucu tarafında user-agent koklama için iyi bir nedeni nadiren vardır. Bu da dahil olmak üzere, sorunların bir demet getiriyor:

  • Onlar genellikle, veya tamamen kullanıcı aracısı başlığını şerit, ya da kimin hakkında yalan tarayıcıları ve diğer kullanıcı-ajanlar zor gerçek tarayıcı başlık metinden ne ayırt etmek. Örneğin yukarıdaki kural aynı zamanda IE sızdırma olduğunda Opera algılamak ve masaüstü IE için çok farklı bir tarayıcı olduğu gibi veya istediğiniz olmayabilir IEMobile (Windows Mobile), olacaktır.

  • Eğer sunucu tarafında kullanıcı aracısı ayrımcılık varsa, aksi yakınlık sayfanın bir sürümünü önbelleğe ve eşleşmiyor diğer tarayıcılarda iade edebilir, karşılık olarak bir Vary: User-Agent başlığı dönmelidir . Ancak, bu başlık dahil IE önbelleğe kadar karışıklık yan etkisi vardır.

Size ulaşmak için çalışıyoruz ne bağlı olarak, CSS kesmek, JScript veya conditional comments kullanarak, istemci tarafında IE ve diğer tarayıcılar arasındaki farkları ele çok daha iyi bir yolu hemen hemen her zaman vardır. Sizin durumunuzda IE tespit çalıştıkları için gerçek amacı nedir?

$ _SERVER ['HTTP_USER_AGENT']

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

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

Baskılar:

Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7) Gecko/20040803 Firefox/0.9.3

Array
(
    [browser_name_regex] => ^mozilla/5\.0 (windows; .; windows nt 5\.1; .*rv:.*) gecko/.* firefox/0\.9.*$
    [browser_name_pattern] => Mozilla/5.0 (Windows; ?; Windows NT 5.1; *rv:*) Gecko/* Firefox/0.9*
    [parent] => Firefox 0.9
    [platform] => WinXP
    [browser] => Firefox
    [version] => 0.9
    [majorver] => 0
    [minorver] => 9
    [cssversion] => 2
    [frames] => 1
    [iframes] => 1
    [tables] => 1
    [cookies] => 1
    [backgroundsounds] =>
    [vbscript] =>
    [javascript] => 1
    [javaapplets] => 1
    [activexcontrols] =>
    [cdf] =>
    [aol] =>
    [beta] => 1
    [win16] =>
    [crawler] =>
    [stripper] =>
    [wap] =>
    [netclr] =>
)

Bu kodu deneyin ...

<?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'];
echo $yourbrowser;

?>


Output of Firefox

Mozilla Firefox

browscap yerine kullanıcı ajanın daha umut verici gibi görünüyor. ben bu sitede insan ziyareti, css sürümü vs ip_address, tarayıcı, os, bot getiriliyor gibi yaygın sorunların çok çözen bir sınıf aracılığıyla olmuştur. i şimdi kaç haftadır kullanıyorum ... sonuçlar umut vericidir.

Demo: - http://thetutlage.com/demo/tut_analytics/

Madde: - http://www.thetutlage.com/post=TUT198

Eğer tarayıcı adlarının tüm almak istiyorsanız tarayıcı php kodu tespit için arama yapabilirsiniz. Try this one.

İşte Chrome, Firefox, Safary, Internet Explorer ve diğer tarayıcılar belirleyebilir bir kod alırsınız.