Определение браузера

Discussion in 'PHP' started by geforse, 9 Jan 2009.

  1. geforse

    geforse Elder - Старейшина

    Joined:
    2 Mar 2008
    Messages:
    617
    Likes Received:
    290
    Reputations:
    1
    Каким способом можно сделать так, чтобы когда пользователь заходит на сайт с помощью Internet Explorer, его "кидало" в папку /ie/

    Когда через Opera в /op/
    Когда через Firefox в/fx/

    Если другой браузер, то например по умолчанию в /ie/
     
  2. oRb

    oRb Elder - Старейшина

    Joined:
    9 May 2008
    Messages:
    294
    Likes Received:
    581
    Reputations:
    256
    Только как пример. Ниже кусок кода из своего старого скрипта:
    PHP:
    <?php
    $agent 
    $_SERVER['HTTP_USER_AGENT'];
    if(
    preg_match("!(Opera[\s\d\./]+)!msi"$agent$math))
    {
        
    $agent $math[1];
        
    $mysqlAgent "opera";
    }
    elseif(
    preg_match("!(Firefox[\s\d\./]+)!msi"$agent$math))
    {
        
    $agent $math[1];
        
    $mysqlAgent "firefox";
    }
    elseif (
    preg_match("!MSIE([\s\d\./]+)!msi"$agent$math))
    {
        
    $agent "Internet Explorer ".$math[1];
        
    $mysqlAgent "msie";
    }
    elseif (
    preg_match("!(Konqueror[\s\d\./]+)!msi"$agent$math))
    {
        
    $agent $math[1];
        
    $mysqlAgent "konqueror";
    }
    elseif (
    preg_match("!(Iceweasel[\s\d\./]+)!msi"$agent$math))
    {
        
    $agent $math[1];
        
    $mysqlAgent "iceweasel";
    }
    elseif (
    preg_match("!(Lynx[\s\d\./]+)!msi"$agent$math))
    {
        
    $agent $math[1];
        
    $mysqlAgent "lynx";
    }
    elseif (
    preg_match("!(Netscape[\s\d\./]+)!msi"$agent$math))
    {
        
    $agent $math[1];
        
    $mysqlAgent "netscape";
    }
    elseif (
    preg_match("!(Safari[\s\d\./]+)!msi"$agent$math))
    {
        
    $agent $math[1];
        
    $mysqlAgent "safari";
    }
    $location "/";
    switch(
    $mysqlAgent)
    {
        case 
    "opera"$location .= "opera/";break;
        case 
    "firefox"$location .= "firefox/";break;
        case 
    "msie"$location .= "msie/";break;
        default: 
    $location .= "msie/";break;
    }
    header('Location: '.$location);
    ?>
     
  3. geforse

    geforse Elder - Старейшина

    Joined:
    2 Mar 2008
    Messages:
    617
    Likes Received:
    290
    Reputations:
    1
    Здорово)
    буду пробовать
     
  4. Sharky

    Sharky Elder - Старейшина

    Joined:
    1 May 2006
    Messages:
    487
    Likes Received:
    312
    Reputations:
    46
    Сначала определяем User Agent
    PHP:
    $user_agent getenv("HTTP_USER_AGENT");
    Затем вот функция вытягивания из User Agent браузера ( список можно расширить... коды браузеров ищи сам)
    PHP:
    function detect_browser()
    {
        global 
    $user_agent$browser;
        
        if (
    strstr($user_agent"Nav") || 
            
    strstr($user_agent"Netscape"))      $browser "Netscape";
        elseif (
    strstr($user_agent"Firefox"))   $browser "Firefox";
        elseif (
    strstr($user_agent"Lynx"))      $browser "Lynx";
        elseif (
    strstr($user_agent"Opera"))     $browser "Opera";
        elseif (
    strstr($user_agent"WebTV"))     $browser "WebTV";
        elseif (
    strstr($user_agent"Konqueror")) $browser "Konqueror";
        elseif (
    strstr($user_agent"MSIE 6"))    $browser "Internet Explorer 6";
        elseif (
    strstr($user_agent"MSIE 7"))    $browser "Internet Explorer 7";
        else                                      
    $browser "Other";
        
        return 
    0;
    }
    ну и на последок вызываем функцию и делаем с определённым брауезом что нам нужно
    PHP:
    detect_browser();
    if (
    $browser == "Internet Explorer 6")
    {
    header('Location: ./ie6/');
    }
    по желанию фуннкуи. можешь убрать и замешать всё в единую кучу
     
    #4 Sharky, 9 Jan 2009
    Last edited: 9 Jan 2009
  5. oRb

    oRb Elder - Старейшина

    Joined:
    9 May 2008
    Messages:
    294
    Likes Received:
    581
    Reputations:
    256
    Sharky, мини поправочка:
    оперу стоит определять выше всех, тк она может маскироваться под ие и лису.
     
  6. Sharky

    Sharky Elder - Старейшина

    Joined:
    1 May 2006
    Messages:
    487
    Likes Received:
    312
    Reputations:
    46
    и чё =) если она будет маскриоваться то по юзер агенту ты вобще никак её не определишь :)
     
  7. oRb

    oRb Elder - Старейшина

    Joined:
    9 May 2008
    Messages:
    294
    Likes Received:
    581
    Reputations:
    256
    Смотри :)
    Нормальный юзер агент оперы:
    Opera/10.00 (X11; Linux i686 ; U; en) Presto/2.2.0
    Маскировка под лису:
    Mozilla/5.0 (X11; Linux i686 ; U; en; rv:1.8.1) Gecko/20061208 Firefox/2.0.0 Opera 10.00
    Маскировка под осла:
    Mozilla/4.0 (compatible; MSIE 6.0; X11; Linux i686 ; en) Opera 10.00

    Те при маскировки опера всегда себя дописывает в конец. И если прочекать лису раньше оперы, то скрипт будет думать, что клиент - лиса.
     
    2 people like this.
  8. geforse

    geforse Elder - Старейшина

    Joined:
    2 Mar 2008
    Messages:
    617
    Likes Received:
    290
    Reputations:
    1
    oRb
    Ещё раз спасибо за скрипт)) всё работает :)
     
  9. Sharky

    Sharky Elder - Старейшина

    Joined:
    1 May 2006
    Messages:
    487
    Likes Received:
    312
    Reputations:
    46
    спасибо за информацию =) не знал что в конце дописывает :)