Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Определение браузера 
:(
    Опции темы
Mal Hack
Дата 24.1.2007, 16:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 122
Всего: 261



Источник: http://www.phpguru.org/static/browser.html
Код:
Код

<?php
    /**
    * UserAgent detection. Based on the js ultimate browser detection thingy.
    * Email [email protected] to send suggestions or improvements.
    *
    * Advantages:
    *
    * o Its quick
    * o It doesn't pollute the global namespace
    *
    * One example usage is to only output a simple version of your website
    * if it's a bot. Why waste your bandwidth? Its still advisable to output some
    * sort of site, otherwise things like news aggregators won't work.
    */
    function GetUserAgent($ua = null)
    {
        /**
        * Default to the user agent that the browser sends
        */
        if (is_null($ua)) {
            $ua = $_SERVER['HTTP_USER_AGENT'];
        }
        
        $b = array();

        /**
        * Major and minor version numbers
        */
        $b['is_major'] = intval(substr($ua, strpos($ua, 'Mozilla/') + 8));
        $b['is_minor'] = substr($ua, strpos($ua, 'Mozilla/') + 8);
        $b['is_minor'] = (int)substr($b['is_minor'], strpos($b['is_minor'], '.') + 1);;

        /**
        * Type of browser
        */
        $b['is_ff']    = strpos($ua, 'Firefox') !== false;
        $b['is_ie']    = (strpos($ua, 'MSIE')     !== false && strpos($ua, 'Opera') === false);
        $b['is_opera'] = strpos($ua, 'Opera')     !== false;
        $b['is_nn']    = (strpos($ua, 'Mozilla')  !== false &&
                          strpos(strtolower($ua), 'spoofer')  === false &&
                          strpos(strtolower($ua), 'webtv')   === false &&
                          strpos(strtolower($ua), 'hotjava') === false &&
                          $b['is_opera'] === false &&
                          $b['is_ie']    === false) &&
                          $b['is_ff']    === false;
        $b['is_konq']  = strpos($ua, 'Konqueror') !== false;

        /**
        * Operating system
        */
        $b['is_win'] = strpos($ua, 'Win') !== false;
        $b['is_mac'] = strpos($ua, 'Mac') !== false;
        $b['is_nix'] = strpos($ua, 'X11') !== false;

        /**
        * Internet Ekplorer
        */
        if ($b['is_ie'] AND !$b['is_opera']) {
            $b['is_ie4']   = strpos($ua, 'MSIE 4.') !== false;
            $b['is_ie5']   = strpos($ua, 'MSIE 5.') !== false;
            $b['is_ie5_5'] = strpos($ua, 'MSIE 5.5') !== false;
            $b['is_ie6']   = strpos($ua, 'MSIE 6.') !== false;
            $b['is_ie7']   = strpos($ua, 'MSIE 7.') !== false;

        /**
        * Firefox
        */
        } elseif ($b['is_ff']) {
            $b['is_ff1'] = strpos($ua, 'Firefox/1') !== false;
            $b['is_ff2'] = strpos($ua, 'Firefox/2') !== false;

        /**
        * Netscape Navigator
        */
        } elseif ($b['is_nn']) {
            $b['is_nn2']   = $b['is_major'] === 2;
            $b['is_nn2up'] = $b['is_major'] >= 2;
            $b['is_nn3']   = $b['is_nn2up'] && $b['is_major'] === 3;
            $b['is_nn3up'] = $b['is_nn2up'] && $b['is_major'] >= 3;
            $b['is_nn4']   = $b['is_nn3up'] && $b['is_major'] === 4;
            $b['is_nn4up'] = $b['is_nn3up'] && $b['is_major'] >= 4;
            $b['is_nn6']   = $b['is_nn4up'] && $b['is_major'] === 5;
            $b['is_nn6up'] = $b['is_nn4up'] && $b['is_major'] >= 5;
            $b['is_nn8']   = $b['is_nn6up'] && (bool)strpos($ua, 'Netscape/8');

        /**
        * Opera
        */
        } elseif ($b['is_opera']) {
            $b['is_opera5'] = strpos($ua, 'Opera/5') !== false;
            $b['is_opera6'] = strpos($ua, 'Opera/6') !== false;
            $b['is_opera7'] = strpos($ua, 'Opera/7') !== false;
            $b['is_opera8'] = strpos($ua, 'Opera/8') !== false;
            $b['is_opera9'] = strpos($ua, 'Opera/9') !== false;
        
        /**
        * Other. Some of the more common robots etc...
        */
        } else {
            $b['is_google']    = strpos($ua, 'Mediapartners-Google') !== false;
            $b['is_googletb']  = strpos($ua, 'GoogleToolbar') !== false;
            $b['is_ffg']       = strpos($ua, 'Feedfetcher-Google') !== false;
            $b['is_googlebot'] = strpos($ua, 'Googlebot') !== false;
            
            $b['is_newsgator'] = strpos($ua, 'NewsGatorOnline/') !== false;
            $b['is_magpierss'] = strpos($ua, 'MagpieRSS') !== false;
            $b['is_planetphp'] = strpos($ua, 'PlanetPHPAggregator') !== false;
            $b['is_bloglines'] = strpos($ua, 'Bloglines') !== false;
            $b['is_doubanbot'] = strpos($ua, 'Doubanbot') !== false;
            $b['is_topix']     = strpos($ua, 'Topix.net') !== false;
            $b['is_rssreader'] = strpos($ua, 'RssReader') !== false;
            $b['is_nnw']       = strpos($ua, 'NetNewsWire') !== false;
            $b['is_ngo']       = strpos($ua, 'NewsGatorOnline') !== false;
            $b['is_gn']        = strpos($ua, 'GreatNews') !== false;
            $b['is_rb']        = strpos($ua, 'RssBar') !== false;
        }
        
        /**
        * Which version of windows?
        */
        if ($b['is_win']) {
            $b['is_98']      = strpos($ua, 'Windows 98')     !== false;
            $b['is_nt']      = strpos($ua, 'Windows NT 4.0') !== false;
            $b['is_2000']    = strpos($ua, 'Windows NT 5.0') !== false;
            $b['is_xp']      = strpos($ua, 'Windows NT 5.1') !== false;
            $b['is_2003']    = strpos($ua, 'Windows NT 5.2') !== false;
            $b['is_vista']   = strpos($ua, 'Windows NT 6.0') !== false;

        /**
        * Macs
        */
        } elseif ($b['is_mac']) {
            $b['is_osx'] = strpos($ua, 'OS X') !== false;

        /**
        * *Nix
        */
        } elseif ($b['is_nix']) {
            $b['is_fed']    = strpos($ua, 'Fedora/') !== false;
            $b['is_ubuntu'] = strpos($ua, 'Ubuntu') !== false;
        }
        
        return $b;
    }
?> 

PM ICQ   Вверх
BobiKK
Дата 24.1.2007, 18:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 655
Регистрация: 1.12.2005
Где: Essen, Deutschlan d

Репутация: 4
Всего: 16



А bootstrap'ом кто-нить пользуется?
PM MAIL   Вверх
AztEK
Дата 26.1.2007, 19:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 723
Регистрация: 4.1.2005

Репутация: 6
Всего: 18



Тему надо в FAQ имхо. Ибо полезно. Вот несколько моих ф-ций (модифицировал в свое время приведенный Mal Hack код).

Код

function detectBot($user_agent) {
    $yandex = stristr($user_agent, 'yandex');
    $rambler = stristr($user_agent, 'rambler');
    $aport = stristr($user_agent, 'aport');
    $google = stristr($user_agent, 'googlebot');
    $msnbot = stristr($user_agent, 'msnbot');
    $yahoo = stristr($user_agent, 'yahoo');
    $bigmir = stristr($user_agent, 'bigmir');
    
    if($yandex) {
        return 'YandexBot';
    } elseif($rambler) {
        return 'RamblerBot';
    } elseif($aport) {
        return 'Aport';
    } elseif($msnbot) {
        return 'MSNBot';
    } elseif($google) {
        return 'GoogleBot';
    } elseif($yahoo) {
        return 'YahooBot';
    } elseif($bigmir) {
        return 'BigMirBot';
    } else {
        return false;
    }
}

function detectOS($user_agent) {
    $win = strstr($user_agent, 'Win');
    $linux = strstr($user_agent, 'Linux');
    $mac = strstr($user_agent, 'Mac');
    $os2 = strstr($user_agent, 'OS/2');
    $beos = strstr($user_agent, 'BeOS');
    $freebsd = strstr($user_agent, 'FreeBSD');
    $sunos = strstr($user_agent, 'SunOS');
    $irix = strstr($user_agent, 'IRIX');
    $aix = strstr($user_agent, 'AIX');
    
    if($win) {
        if(stristr($user_agent, 's nt')) {
            if(preg_match("/T\s(\d+[\.\d+]+)[\;|\)]/", $user_agent, $regs)) {
                switch($regs[1]) {
                    case '5.0':
                        $v = ' 2000';
                    break;
                    
                    case '5.1':
                        $v = ' XP';
                    break;
                    
                    case '5.2':
                        $v = ' 2003';
                    break;
                    
                    case '4.0':
                        $v = ' NT 4.0';
                    break;
                    
                    case '3.51':
                        $v = ' NT 3.51';
                    break;
                    
                    default:
                        $v = ' ' . $regs[1];
                    break;
                }
            }
            else $v = 'NT';
        } elseif(strstr($user_agent, 'Win95')) {
            $v = ' 95';
        } elseif(strstr($user_agent, 'Win98')) {
            $v = ' 98';
        } elseif(strstr($user_agent, 'WinNT')) {
            $v = ' NT';
        }
        else $v = '';
        return 'Windows' . $v;
    } elseif($linux) {
        $v = preg_match("/x\s\/*(i*\d+[\.\d+]*)/", $user_agent, $regs) ? ' ' . $regs[1] : '';
        return 'Linux' . $v;
    } elseif($mac) {
        $v = preg_match("/\s(\w+)\W/", $user_agent, $regs) ? ' ' . $regs[1] : '';
        return 'Macintosh' . $v;
    } elseif($os2) {
        $v = preg_match("/\/2\s(\w+)[\;|\)]/", $user_agent, $regs) ? ' ' . $regs[1] : '';
        return 'OS/2' . $v;
    } elseif($beos) {
        $v = preg_match("/S\s(\w+)[\;|\)]/", $user_agent, $regs) ? ' ' . $regs[1] : '';
        return 'BeOS' . $v;
    } elseif($freebsd) {
        $v = preg_match("/D\s(\w+)[\;|\)]/", $user_agent, $regs) ? ' ' . $regs[1] : '';
        return 'FreeBSD' . $v;
    } elseif($sunos) {
        $v = preg_match("/S\s(\w+)[\;|\)]/", $user_agent, $regs) ? ' ' . $regs[1] : '';
        return 'SunOS' . $v;
    } elseif($irix) {
        $v = preg_match("/X\s(\w+)[\;|\)]/", $user_agent, $regs) ? ' ' . $regs[1] : '';
        return 'IRIX' . $v;
    } elseif($aix) {
        $v = preg_match("/X\s(\w+)[\;|\)]/", $user_agent, $regs) ? ' ' . $regs[1] : '';
        return 'AIX' . $v;
    } else {
        return 'undefined';
    }
}

function detectBrowser($user_agent) {
    if(eregi('opera', $user_agent)) {
        $val = stristr($user_agent, 'opera');
        if(eregi("/", $val)) {
            $val = explode('/',$val);
            $browser['type'] = $val[0];
            $val = explode(' ',$val[1]);
            $browser['version'] = $val[0];
        } else {
            $val = explode(' ', stristr($val, 'opera'));
            $browser['type'] = $val[0];
            $browser['version'] = $val[1];
        }
    } elseif(eregi('Firefox', $user_agent)) {
        $browser['type'] = 'Firefox';
        $val = stristr($user_agent, 'Firefox');
        $val = explode('/', $val);
        $browser['version'] = $val[1];
    } elseif(eregi('Konqueror', $user_agent)) {
        $val = explode(' ', stristr($user_agent, 'Konqueror'));
        $val = explode('/', $val[0]);
        $browser['type'] = $val[0];
        $browser['version'] = str_replace(')', '', $val[1]);
    } elseif(eregi('microsoft internet explorer', $user_agent)) {
        $browser['type'] = 'Internet Explorer';
        $browser['version'] = '1.0';
        $var = stristr($user_agent, "/");
        if(ereg("308|425|426|474|0b1", $var))
            $browser['version'] = "1.5";
    } elseif(eregi('msie', $user_agent) && !eregi('opera', $user_agent)) {
        $browser['type'] = 'Internet Explorer';
        $val = explode(' ', stristr($user_agent, 'msie'));
        $browser['version'] = substr($val[1], 0, strlen($val[1]) - 1);
    } elseif(eregi('galeon', $user_agent)) {
        $val = explode(' ', stristr($user_agent, 'galeon'));
        $val = explode('/', $val[0]);
        $browser['type'] = $val[0];
        $browser['version'] = $val[1];
    } elseif(eregi('webtv', $user_agent)) {
        $val = explode('/', stristr($user_agent, 'webtv'));
        $browser['type'] = $val[0];
        $browser['version'] = $val[1];
    } elseif(eregi('NetPositive', $user_agent)) {
        $val = explode('/', stristr($user_agent, 'NetPositive'));
        $browser['type'] = $val[0];
        $browser['version'] = $val[1];
    } elseif(eregi('mspie', $user_agent) || eregi('pocket', $user_agent)) {
        $val = explode(' ', stristr($user_agent, 'mspie'));
        $browser['type'] = 'MSPIE';
        if(eregi('mspie', $user_agent)) {
            $browser['version'] = $val[1];
        } else {
            $val = explode('/', $user_agent);
            $browser['version'] = $val[1];
        }
    } elseif(eregi('icab', $user_agent)) {
        $val = explode(' ', stristr($user_agent, 'icab'));
        $browser['type'] = $val[0];
        $browser['version'] = $val[1];
    } elseif(eregi('omniweb', $user_agent)) {
        $val = explode('/', stristr($user_agent, 'omniweb'));
        $browser['type'] = $val[0];
        $browser['version'] = $val[1];
    } elseif(eregi('Phoenix', $user_agent)) {
        $browser['type'] = 'Phoenix';
        $val = explode('/', stristr($user_agent,'Phoenix/'));
        $browser['version'] = $val[1];
    } elseif(eregi('firebird', $user_agent)) {
        $browser['type'] = 'Firebird';
        $val = stristr($user_agent, 'Firebird');
        $val = explode('/', $val);
        $browser['version'] = $val[1];
    } elseif(eregi('mozilla', $user_agent) && eregi("rv:[0-9].[0-9][a-b]", $user_agent) && !eregi('netscape', $user_agent)) {
        $browser['type'] = 'Mozilla';
        $val = explode(" ", stristr($user_agent, "rv:"));
        eregi("rv:[0-9].[0-9][a-b]", $user_agent, $val);
        $browser['version'] = str_replace('rv:', '', $val[0]);
    } elseif(eregi('mozilla', $user_agent) && eregi("rv:[0-9]\.[0-9]", $user_agent) && !eregi('netscape', $user_agent)) {
        $browser['type'] = 'Mozilla';
        $val = explode(' ', stristr($user_agent, 'rv:'));
        eregi("rv:[0-9]\.[0-9]\.[0-9]", $user_agent,$val);
        $browser['version'] = str_replace("rv:", "", $val[0]);
    } elseif(eregi('libwww', $user_agent)) {
        if(eregi('amaya', $user_agent)) {
            $val = explode('/', stristr($user_agent, 'amaya'));
            $browser['type'] = 'Amaya'; 
            $val = explode(' ', $val[1]);
            $browser['version'] = $val[0];
        } else {
            $val = explode('/', $user_agent);
            $browser['type'] = 'Lynx';
            $browser['version'] = $val[1];
        }
    } elseif(eregi('safari', $user_agent)) {
        $browser['type'] = 'Safari';
        $browser['version'] = '';
    } elseif(eregi('netscape', $user_agent)) {
        $val = explode(' ', stristr($user_agent,'netscape'));
        $val = explode('/', $val[0]);
        $browser['type'] = $val[0];
        $browser['version'] = $val[1];
    } elseif(eregi('mozilla', $user_agent) && !eregi("rv:[0-9]\.[0-9]\.[0-9]",$user_agent)) {
        $val = explode(' ', stristr($user_agent, 'mozilla'));
        $val = explode('/', $val[0]);
        $browser['type'] = 'Netscape';
        $browser['version'] = $val[1];
    } else {
        $browser['type'] = 0; 
        $browser['version'] = 0;
    }
    return $browser;
}


Добавлено @ 19:30 
а, нет, не этот... но смысл тот же


--------------------
Linux is like wigwam -- no windows, no gates, apache inside.
PM MAIL Jabber   Вверх
GZep
Дата 29.1.2007, 16:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


участник Винграда
***


Профиль
Группа: Завсегдатай
Сообщений: 1528
Регистрация: 7.7.2006
Где: Москва

Репутация: 8
Всего: 32



А вот мой вариант. Это переделанный класс PEAR smile , я его упростил, ускорил и добавил FireFox 2, но в нем до сих пор нету ИЕ7
Давайте вместе доработаем?
Код

<?php
class UserAgentDetect {
    var $agent = array(
            "name" => "Unknown",//(string) Browser name (MSIE, Opera, FireFox, etc.)
            "version" => null,//(integer) Browser version
            "type" => null,//(sring) Browser type (robot or browser)
            "js" => array(
                "enabled" => null,
                "version" => null,
                "ajax" => false,
                "dom" => false,
                "dhtml" => false
            )
        ),
        $os = array(
            "name" => null,//(string) Operating system name
            "version" => null//(string) Operating system version
        );
    function UserAgentDetect() {
        /* * * * * * * * * * * * * * * * * * * * *\
        *         Get User Agent variable         *
        \* * * * * * * * * * * * * * * * * * * * */
        if (isset($_SERVER['HTTP_USER_AGENT']))
            $userAgent = strtolower($_SERVER['HTTP_USER_AGENT']);
        elseif (isset($GLOBALS['HTTP_SERVER_VARS']['HTTP_USER_AGENT']))
            $userAgent = strtolower($GLOBALS['HTTP_SERVER_VARS']['HTTP_USER_AGENT']);
        else
            return;
        /**/
        if (preg_match(";^([[:alnum:]]+)[ /\(]*[[:alpha:]]*([\d]*)(\.[\d\.]*);", $userAgent, $matches))
            list(, $leadingIdentifier, $majorVersion, $subVersion) = $matches;
        /* * * * * * * * * * * * * * * * * * * * *\
        *              Browser detect             *
        \* * * * * * * * * * * * * * * * * * * * */
        $this->agent['version'] = $majorVersion;
        $browser['webdav'] = ($userAgent == 'microsoft data access internet publishing provider dav' || $userAgent == 'microsoft data access internet publishing provider protocol discovery');
        $browser['konq'] = $browser['safari'] = (strpos($userAgent, 'konqueror') !== false || strpos($userAgent, 'safari') !== false);
        $browser['text'] = strpos($userAgent, 'links') !== false || strpos($userAgent, 'lynx') !== false || strpos($userAgent, 'w3m') !== false;
        $browser['ns'] = strpos($userAgent, 'mozilla') !== false && !(strpos($userAgent, 'spoofer') !== false) && !(strpos($userAgent, 'compatible') !== false) && !(strpos($userAgent, 'hotjava') !== false) && !(strpos($userAgent, 'opera') !== false) && !(strpos($userAgent, 'webtv') !== false) ? 1 : 0;
        $browser['netgem'] = strpos($userAgent, 'netgem') !== false;
        $browser['icab'] = strpos($userAgent, 'icab') !== false;
        $browser['ns2'] = $browser['ns'] && $majorVersion == 2;
        $browser['ns3'] = $browser['ns'] && $majorVersion == 3;
        $browser['ns4'] = $browser['ns'] && $majorVersion == 4;
        $browser['ns4up'] = $browser['ns'] && $majorVersion >= 4;
        $browser['nav'] = $browser['belowns6'] = $browser['ns'] && $majorVersion < 5;
        $browser['ns6'] = !$browser['konq'] && $browser['ns'] && $majorVersion == 5;
        $browser['ns6up'] = $browser['ns6'] && $majorVersion >= 5;
        $browser['gecko'] = strpos($userAgent, 'gecko') !== false && !$browser['konq'];
        $browser['firefox'] = $browser['gecko'] && strpos($userAgent, 'firefox') !== false;
        $browser['firefox0.x'] = $browser['firefox'] && strpos($userAgent, 'firefox/0.') !== false;
        $browser['firefox1.x'] = $browser['firefox'] && strpos($userAgent, 'firefox/1.') !== false;
        //Это я добавил FireFox 2
        $browser['firefox2.x'] = $browser['firefox'] && strpos($userAgent, 'firefox/2.') !== false;
        //Конец добавления
        $browser['ie'] = strpos($userAgent, 'msie') !== false && !(strpos($userAgent, 'opera') !== false);
        $browser['ie3'] = $browser['ie'] && $majorVersion < 4;
        $browser['ie4'] = $browser['ie'] && $majorVersion == 4 && (strpos($userAgent, 'msie 4') !== false);
        $browser['ie4up'] = $browser['ie'] && !$browser['ie3'];
        $browser['ie5'] = $browser['ie4up'] && (strpos($userAgent, 'msie 5') !== false);
        $browser['ie5_5'] = $browser['ie4up'] && (strpos($userAgent, 'msie 5.5') !== false);
        $browser['ie5up'] = $browser['ie4up'] && !$browser['ie3'] && !$browser['ie4'];
        $browser['ie5_5up'] = $browser['ie5up'] && !$browser['ie5'];
        $browser['ie6'] = strpos($userAgent, 'msie 6') !== false;
        $browser['ie6up'] = $browser['ie5up'] && !$browser['ie5'] && !$browser['ie5_5'];
        $browser['ie7'] = strpos($userAgent, 'msie 7') !== false;
        $browser['ie7up'] = $browser['ie6up'] && !$browser['ie6'];
        $browser['belowie6'] = $browser['ie'] && !$browser['ie6up'];
        $browser['opera'] = strpos($userAgent, 'opera') !== false;
        $browser['opera2'] = strpos($userAgent, 'opera 2') !== false || strpos($userAgent, 'opera/2') !== false;
        $browser['opera3'] = strpos($userAgent, 'opera 3') !== false || strpos($userAgent, 'opera/3') !== false;
        $browser['opera4'] = strpos($userAgent, 'opera 4') !== false || strpos($userAgent, 'opera/4') !== false;
        $browser['opera5'] = strpos($userAgent, 'opera 5') !== false || strpos($userAgent, 'opera/5') !== false;
        $browser['opera6'] = strpos($userAgent, 'opera 6') !== false || strpos($userAgent, 'opera/6') !== false;
        $browser['opera7'] = strpos($userAgent, 'opera 7') !== false || strpos($userAgent, 'opera/7') !== false;
        $browser['opera8'] = strpos($userAgent, 'opera 8') !== false || strpos($userAgent, 'opera/8') !== false;
        $browser['opera5up'] = $browser['opera'] && !$browser['opera2'] && !$browser['opera3'] && !$browser['opera4'];
        $browser['opera6up'] = $browser['opera'] && !$browser['opera2'] && !$browser['opera3'] && !$browser['opera4'] && !$browser['opera5'];
        $browser['opera7up'] = $browser['opera'] && !$browser['opera2'] && !$browser['opera3'] && !$browser['opera4'] && !$browser['opera5'] && !$browser['opera6'];
        $browser['opera8up'] = $browser['opera'] && !$browser['opera2'] && !$browser['opera3'] && !$browser['opera4'] && !$browser['opera5'] && !$browser['opera6'] && !$browser['opera7'];
        $browser['belowopera8'] = $browser['opera'] && !$browser['opera8up'];
        $browser['aol'] = strpos($userAgent, 'aol') !== false;
        $browser['aol3'] = $browser['aol'] && $browser['ie3'];
        $browser['aol4'] = $browser['aol'] && $browser['ie4'];
        $browser['aol5'] = strpos($userAgent, 'aol 5') !== false;
        $browser['aol6'] = strpos($userAgent, 'aol 6') !== false;
        $browser['aol7'] = strpos($userAgent, 'aol 7') !== false || strpos($userAgent, 'aol7') !== false;
        $browser['aol8'] = strpos($userAgent, 'aol 8') !== false || strpos($userAgent, 'aol8') !== false;
        $browser['webtv'] = strpos($userAgent, 'webtv') !== false;
        $browser['aoltv'] = $browser['tvnavigator'] = strpos($userAgent, 'navio') !== false || strpos($userAgent, 'navio_aoltv') !== false;
        $browser['hotjava'] = strpos($userAgent, 'hotjava') !== false;
        $browser['hotjava3'] = $browser['hotjava'] && $majorVersion == 3;
        $browser['hotjava3up'] = $browser['hotjava'] && $majorVersion >= 3;
        /* * * * * * * * * * * * * * * * * * * * *\
        *         Get JavaScript version          *
        \* * * * * * * * * * * * * * * * * * * * */
        if ($browser['ns2'] || $browser['ie3'])
            $this->agent['js']['version'] = 1.0;
        elseif ($browser['opera5up'])
            $this->agent['js']['version'] = 1.3;
        elseif ($browser['opera'] || $browser['ns3'])
            $this->agent['js']['version'] = 1.1;
        elseif (($browser['ns4'] && ($version <= 4.05)) || $browser['ie4'])
            $this->agent['js']['version'] = 1.2;
        elseif (($browser['ie5up'] && strpos($userAgent, 'mac') !== false) || $browser['konq'])
            $this->agent['js']['version'] = 1.4;
        elseif (($browser['ns4'] && ($version > 4.05)) || $browser['ie5up'] || $browser['hotjava3up'])
            $this->agent['js']['version'] = 1.3;
        elseif ($browser['ns6up'] || $browser['gecko'] || $browser['netgem'])
            $this->agent['js']['version'] = 1.5;
        /**/
        if ($browser['gecko'] || $browser['ie5up'] || $browser['konq'] || $browser['opera8up'])
            $this->agent['js']['ajax'] = true;
        if ($browser['ns6up'] || $browser['opera5up'] || $browser['konq'] || $browser['netgem'])
            $this->agent['js']['dom'] = true;
        if ($browser['ie4up'] || $browser['ns4up'] || $browser['opera5up'] || $browser['konq'] || $browser['netgem'])
            $this->agent['js']['dhtml'] = true;
        /* * * * * * * * * * * * * * * * * * * * *\
        *         Operating system detect         *
        \* * * * * * * * * * * * * * * * * * * * */
        $os['win'] = strpos($userAgent, 'win') !== false || strpos($userAgent, '16bit') !== false;
        $os['win95'] = strpos($userAgent, 'win95') !== false || strpos($userAgent, 'windows 95') !== false;
        $os['win16'] = strpos($userAgent, 'win16') !== false || strpos($userAgent, '16bit') !== false || strpos($userAgent, 'windows 3.1') !== false || strpos($userAgent, 'windows 16-bit') !== false;
        $os['win31'] = strpos($userAgent, 'windows 3.1') !== false || strpos($userAgent, 'win16') !== false || strpos($userAgent, 'windows 16-bit') !== false;
        $os['winme'] = strpos($userAgent, 'win 9x 4.90') !== false;
        $os['win2k'] = strpos($userAgent, 'windows nt 5.0') !== false;
        $os['winxp'] = strpos($userAgent, 'windows nt 5.1') !== false;
        $os['win2003'] = strpos($userAgent, 'windows nt 5.2') !== false;
        $os['win98'] = strpos($userAgent, 'win98') !== false || strpos($userAgent, 'windows 98') !== false;
        $os['win9x'] = $os['win95'] || $os['win98'];
        $os['winnt'] = (strpos($userAgent, 'winnt') !== false || strpos($userAgent, 'windows nt') !== false) && strpos($userAgent, 'windows nt 5') === false;
        $os['win32'] = $os['win95'] || $os['winnt'] || $os['win98'] || $majorVersion >= 4 && strpos($userAgent, 'win32') !== false || strpos($userAgent, '32bit') !== false;
        $os['os2'] = strpos($userAgent, 'os/2') !== false || strpos($userAgent, 'ibm-webexplorer') !== false;
        $os['mac'] = strpos($userAgent, 'mac') !== false;
        $os['mac68k'] = $os['mac'] && (strpos($userAgent, '68k') !== false || strpos($userAgent, '68000') !== false);
        $os['macppc'] = $os['mac'] && (strpos($userAgent, 'ppc') !== false || strpos($userAgent, 'powerpc') !== false);
        $os['sun'] = strpos($userAgent, 'sunos') !== false;
        $os['sun4'] = strpos($userAgent, 'sunos 4') !== false;
        $os['sun5'] = strpos($userAgent, 'sunos 5') !== false;
        $os['suni86'] = $os['sun'] && strpos($userAgent, 'i86') !== false;
        $os['irix'] = strpos($userAgent, 'irix') !== false;
        $os['irix5'] = strpos($userAgent, 'irix 5') !== false;
        $os['irix6'] = strpos($userAgent, 'irix 6') !== false || strpos($userAgent, 'irix6') !== false;
        $os['hpux'] = strpos($userAgent, 'hp-ux') !== false;
        $os['hpux9'] = $os['hpux'] && strpos($userAgent, '09.') !== false;
        $os['hpux10'] = $os['hpux'] && strpos($userAgent, '10.') !== false;
        $os['aix'] = strpos($userAgent, 'aix') !== false;
        $os['aix1'] = strpos($userAgent, 'aix 1') !== false;
        $os['aix2'] = strpos($userAgent, 'aix 2') !== false;
        $os['aix3'] = strpos($userAgent, 'aix 3') !== false;
        $os['aix4'] = strpos($userAgent, 'aix 4') !== false;
        $os['linux'] = strpos($userAgent, 'inux') !== false;
        $os['sco'] = strpos($userAgent, 'sco') !== false || strpos($userAgent, 'unix_sv') !== false;
        $os['unixware'] = strpos($userAgent, 'unix_system_v') !== false;
        $os['mpras'] = strpos($userAgent, 'ncr') !== false;
        $os['reliant'] = strpos($userAgent, 'reliant') !== false;
        $os['dec'] = strpos($userAgent, 'dec') !== false || strpos($userAgent, 'osf1') !== false || strpos($userAgent, 'dec_alpha') !== false || strpos($userAgent, 'alphaserver') !== false || strpos($userAgent, 'ultrix') !== false || strpos($userAgent, 'alphastation') !== false;
        $os['sinix'] = strpos($userAgent, 'sinix') !== false;
        $os['freebsd'] = strpos($userAgent, 'freebsd') !== false;
        $os['bsd'] = strpos($userAgent, 'bsd') !== false;
        $os['unix'] = strpos($userAgent, 'x11') !== false || strpos($userAgent, 'unix') !== false || $os['sun'] || $os['irix'] || $os['hpux'] || $os['sco'] || $os['unixware'] || $os['mpras'] || $os['reliant'] || $os['dec'] || $os['sinix'] || $os['aix'] || $os['linux'] || $os['bsd'] || $os['freebsd'];
        $os['vms'] = strpos($userAgent, 'vax') !== false || strpos($userAgent, 'openvms') !== false;
        /**/
        $in_vendorStrings = array(
            'ie' => 'Microsoft Internet Explorer',
            'ie4up' => 'Microsoft Internet Explorer 4.x',
            'ie5up' => 'Microsoft Internet Explorer 5.x',
            'ie6up' => 'Microsoft Internet Explorer 6.x',
            'opera4' => 'Opera 4.x',
            'opera5up' => 'Opera 5.x',
            'nav' => 'Netscape Navigator',
            'ns4' => 'Netscape 4.x',
            'ns6up' => 'Mozilla/Netscape 6.x',
            'firefox0.x' => 'Firefox 0.x',
            'firefox1.x' => 'Firefox 1.x',

            //Это я добавил FireFox 2
            'firefox2.x' => 'Firefox 2.x',
            //Конец добавления

            'konq' => 'Konqueror/Safari',
            'netgem' => 'Netgem/iPlayer'
        );
        foreach($in_vendorStrings as $flag => $string)
            if (!empty($browser[$flag]))
                $this->agent['name'] = $string;
    }
}
$UserAgentDetect = new UserAgentDetect();
echo "<pre>" . print_r($UserAgentDetect->agent, true) . "</pre>\n";
echo "<pre>" . print_r($UserAgentDetect->os, true) . "</pre>\n";
?>

Можите прямо скопировать целиком, запускать, редактировать.

Вообщето если приглядеться - скрипт не очень сложный... Ах, да, еще в нем брохлит переменная $agent['version'](она врет smile ).

На мой взляд этот вариант самый "полный" из сдесь присутствующих.


--------------------
user posted imageuser posted image
PM MAIL WWW ICQ Skype GTalk   Вверх
Gold Dragon
Дата 30.1.2007, 08:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 10
Всего: 71



Плохо что эти варианты не могут отличать версии браузеров, например, Opera 9.0 от Opera 9.2


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
Vaulter
Дата 30.1.2007, 11:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1724
Регистрация: 30.12.2002
Где: бункер

Репутация: 6
Всего: 22



Gold Dragon, а зачем такая точность?


--------------------
PM MAIL WWW ICQ   Вверх
GZep
Дата 30.1.2007, 15:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


участник Винграда
***


Профиль
Группа: Завсегдатай
Сообщений: 1528
Регистрация: 7.7.2006
Где: Москва

Репутация: 8
Всего: 32



Ну, вариант, который я выложил просто определяет opera9 или opera9up - думаю, что большая точность и не нужна.

Кстати, мне никто не хочет его(вариант, который я выложил) улучшить? В нем еще надо ие7 сделать и проверку на бот/небот.


--------------------
user posted imageuser posted image
PM MAIL WWW ICQ Skype GTalk   Вверх
GZep
Дата 2.2.2007, 17:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


участник Винграда
***


Профиль
Группа: Завсегдатай
Сообщений: 1528
Регистрация: 7.7.2006
Где: Москва

Репутация: 8
Всего: 32



  • А какие версии javascript у ie7, FF2 и у будущего FF3?
  • И еще, эти 3 браузера поддерживают аякс совершенно точно(если не учитывать, что у ие актив икс может быть отключен и вообще javascript может быть отключен)?
  • Какие данные приходят от этих браузеров в UserAgent(ОС пренебречь)?
 smile 

Это сообщение отредактировал(а) GZep - 2.2.2007, 18:55


--------------------
user posted imageuser posted image
PM MAIL WWW ICQ Skype GTalk   Вверх
ewolf
Дата 2.2.2007, 19:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 389
Регистрация: 15.8.2006
Где: г. Москва

Репутация: 8
Всего: 18



Вот здесь, мне кажется, неплохой список возможных строк UserAgent
http://en.wikipedia.org/wiki/User_agent

В том числе
7.0 beta running on Windows Vista — Mozilla/4.0 (compatible; MSIE 7.0b; Windows NT 6.0)
7.0 beta 2 on Windows XP SP2 — Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; SV1; Arcor 5.005; .NET CLR 1.0.3705; .NET CLR 1.1.4322)
7.0 on Windows XP SP2 — Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; YPC 3.0.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)

Это сообщение отредактировал(а) ewolf - 2.2.2007, 19:18
PM MAIL ICQ   Вверх
Mal Hack
Дата 8.2.2007, 21:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 122
Всего: 261



Да, еще за лису надо считать Iceweasel
PM ICQ   Вверх
SergV
Дата 6.10.2007, 12:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 197
Регистрация: 4.8.2006
Где: Германия

Репутация: нет
Всего: 1



Вобщем фигня у меня какаято, перепробовал несколько вариантов определения браузера, и все на выходе дают либо array, либо вроде этого:
Цитата

Array ( [is_major] => 0 [is_minor] => 0 [is_ie] => [is_opera] => [is_safari] => [is_konqueror] => [is_nn] => [is_konq] => [is_google] => [is_googletb] => [is_ffg] => [is_googlebot] => [is_newsgator] => [is_magpierss] => [is_planetphp] => [is_bloglines] => [is_doubanbot] => [is_topix] => [is_rssreader] => [is_nnw] => [is_ngo] => [is_gn] => [is_rb] => ) 

Не пойму вобщем в чем проблема, это не может быть связано с локальным сервером?.., я на веб хосте не пробовал.
PM   Вверх
CyClon
Дата 7.10.2007, 11:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 838
Регистрация: 3.12.2005

Репутация: 3
Всего: 4



Не понимаю, зачем это нужно :\ В $_SERVER['USER_AGENT'] все написано максимально точно и понятно.

Эти функции наверно нужно юзать разве что для сбора статистики (типа сколько юзеров под виндой зашло на сайт и т.д.)


--------------------
user posted image
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0670 ]   [ Использовано запросов: 23 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.