Форум dkLab и Denwer
Здесь общаются Web-разработчики.
Генеральный спонсор:
Хостинг «Джино»

Определение браузера, его версии и ОС клиента (Евгений Бондарев)
Author Message
Евгений Бондарев
Модератор



Joined: 10 Mar 2003
Posts: 723
Карма: 16
   поощрить/наказать

Location: Харьков/Киев, Украина

PostPosted: Thu Mar 27, 2003 4:09 pm ()
   Post subject: Определение браузера, его версии и ОС клиента
Reply with quote

Доработано в спешке... Может не самым оптимальным, то более менее рабочим образом. За основу взят ман ;)
Code (any language): скопировать код в буфер обмена
function ckos() {
        $so = $_SERVER['HTTP_USER_AGENT'];
        $windowsxp = preg_match("/windows nt 5.1/i", $so);
        $windowsxp2 = preg_match("/windows xp/i", $so);
        $linux = preg_match("/linux/i", $so);
        $windowsme = preg_match("/win 9x 4.90/i", $so);
        $windowsme2 = preg_match("/windows me/i", $so);
        $windows2k = preg_match("/windows nt 5.0/i", $so);
        $windows2kb = preg_match("/windows 2000/i", $so);
        $windowsnt = preg_match("/windows nt 3.1/i", $so);
        $windowsnt2 = preg_match("/windows nt 3.5.0/i", $so);
        $windowsnt3 = preg_match("/windows nt 3.5.1/i", $so);
        $windowsnt4 = preg_match("/windows nt 4.0/i", $so);
        $windows98 = preg_match("/windows 98/i", $so);
        $windows95 = preg_match("/windows 95/i", $so);
        if ($windowsxp == 1 or $windowsxp2 == 1) {
        $sys = "Windows XP";
        } else if ($linux == 1) {
        $sys = "Linux";
        } else if ($windowsme == 1 or $windowsme2 == 1) {
        $sys = "Windows ME";
        } else if ($windows2k == 1 or $windows2kb == 1) {
        $sys = "Windows 2000";
        } else if ($windowsnt == 1 or $windowsnt2 == 1 or $windowsnt3 == 1 or $windowsnt4 == 1) {
        $sys = "Windows NT";
        } else if ($windows98 == 1 and $windowsme != 1) {
        $sys = "Windows 98";
        } else if ($windows95 == 1) {
        $sys = "Windows 95";
        } else {
        $sys = "Not identified";
        }
        return($sys);
}

function chbr() {
        if( ereg( "Nav", $_SERVER['HTTP_USER_AGENT'] ) ||
           ereg( "Gold", $_SERVER['HTTP_USER_AGENT'] ) ||
           ereg( "X11", $_SERVER['HTTP_USER_AGENT'] ) ||
           ereg( "Mozilla", $_SERVER['HTTP_USER_AGENT'] ) ||
           ereg( "Netscape", $_SERVER['HTTP_USER_AGENT'] ) AND
           !ereg( "MSIE", $_SERVER['HTTP_USER_AGENT'] ) AND
           !ereg( "Gecko", $_SERVER['HTTP_USER_AGENT'] ) )
        {
          $browser = "Netscape";
          $ver = "small one ;-)";
        }
        else if( ereg( "MSIE", $_SERVER['HTTP_USER_AGENT'] ) AND
                !ereg( "Gecko", $_SERVER['HTTP_USER_AGENT'] ) )
        {
          $browser = "MSIE";
          $ver = ereg_replace(".+MSIE ([^;]+);.+", "\\1", $_SERVER['HTTP_USER_AGENT']);
        }
        else if( ereg( "Netscape", $_SERVER['HTTP_USER_AGENT'] ) AND
           !ereg( "MSIE", $_SERVER['HTTP_USER_AGENT'] ) AND
           ereg( "Gecko", $_SERVER['HTTP_USER_AGENT'] ) )
        {
          $browser = "Netscape new";
          $ver = ereg_replace(".+Netscape[67]{1}/(.+)$", "\\1", $_SERVER['HTTP_USER_AGENT']);
        }
        else if( ereg( "Gecko", $_SERVER['HTTP_USER_AGENT'] ) )
        {
          $browser = "Mozilla";
          $ver = ereg_replace(".+rv:([^)]+).+", "\\1", $_SERVER['HTTP_USER_AGENT']);
        }
        else
        {
          $browser = "Other";
          $ver = "0.0";
        }
       
        if( ereg( "Opera", $_SERVER['HTTP_USER_AGENT'] ) )
        {
          $browser = "Opera";
          $ver = ereg_replace("^Opera/([^ ]+) .*", "\\1", $_SERVER['HTTP_USER_AGENT']);
          if (ereg( "Opera", $ver ))
                  $ver = ereg_replace(".+Opera ([^ ]+) .+", "\\1", $ver);
        }
       
        return array($browser,$ver);
}
Оптимизация и проверка НН4х - приветствуется ;)
Back to top
View user's profile Send private message
Юрий Насретдинов
Модератор



Joined: 13 Mar 2003
Posts: 8642
Карма: 198
   поощрить/наказать

Location: 007 495

PostPosted: Fri Mar 28, 2003 9:20 am (спустя 17 часов 11 минут)
   Post subject:
Reply with quote

Вот есть очень интересный код из одной гостевой:
Code (any language): скопировать код в буфер обмена
/**
 *        Return Operation System from user agent string
 *        @param Array
 *        @param String
 *        @return String
 */
        function getSystem($arrSystem,$userAgent)
        {
                $system = 'Other';
                foreach($arrSystem as $key => $value)
                {
                        if (strpos($userAgent, $key) !== false)
                        {
                                $system = $value;
                                break;
                        }
                }
                return $system;
        }

/**
 *        Return Browser from user agent string
 *        @param Array
 *        @param String
 *        @return Associative Array
 */
        function getBrowser($arrBrowser,$userAgent)
        {
                $version = "";
                $browser = 'Other';
                if (($pos = strpos($userAgent, 'Opera')) !== false)
                {
                        $browser = 'Opera';
                        $pos += 6;
                        if ((($posEnd = strpos($userAgent, ';', $pos)) !== false) || (($posEnd = strpos($userAgent, ' ', $pos)) !== false))
                                $version = trim(substr($userAgent, $pos, $posEnd - $pos));
                }
                elseif (($pos = strpos($userAgent, 'MSIE')) !== false)
                {
                        $browser = 'Internet Explorer';
                        $posEnd = strpos($userAgent, ';', $pos);
                        if ($posEnd !== false)
                        {
                                $pos += 4;
                                $version = trim(substr($userAgent, $pos, $posEnd - $pos));
                        }
                }
                elseif (((strpos($userAgent, 'Gecko')) !== false) && ((strpos($userAgent, 'Netscape')) === false))
                {
                        $browser = 'Mozila';
                        if (($pos = strpos($userAgent, 'rv:')) !== false)
                        {
                                $posEnd = strpos($userAgent, ')', $pos);
                                if ($posEnd !== false)
                                {
                                        $pos += 3;
                                        $version = trim(substr($userAgent, $pos, $posEnd - $pos));
                                }
                        }
                }
                elseif ((strpos($userAgent, ' I;') !== false) || (strpos($userAgent, ' U;') !== false) || (strpos($userAgent, ' U ;') !== false) || (strpos($userAgent, ' I)') !== false) || (strpos($userAgent, ' U)') !== false))
                {
                        $browser = 'Netscape Navigator';
                        if (($pos = strpos($userAgent, 'Netscape6')) !== false)
                        {
                                $pos += 10;
                                $version = trim(substr($userAgent, $pos, strlen($userAgent) - $pos));
                        }
                        else
                        {
                                if (($pos = strpos($userAgent, 'Mozilla/')) !== false)
                                {
                                        if (($posEnd = strpos($userAgent, ' ', $pos)) !== false)
                                        {
                                                $pos += 8;
                                                $version = trim(substr($userAgent, $pos, $posEnd - $pos));
                                        }
                                }
                        }
                }
                else
                {
                        foreach($arrBrowser as $key => $value)
                        {
                                if (strpos($userAgent, $key) !== false)
                                {
                                        $browser = $value;
                                        break;
                                }
                        }
                }
                $userAgentArr['browser'] = $browser;
                $userAgentArr['version'] = $version;
                return $userAgentArr;
        }
А вот сами массивы со значениями:
Code (any language): скопировать код в буфер обмена
        $arrSystem['Windows 3.1'] = "Windows 3.1";
        $arrSystem['Win16'] = "Windows 3.1";
        $arrSystem['16bit'] = "Windows 3.1";
        $arrSystem['Win32'] = "Windows 95";
        $arrSystem['32bit'] = "Windows 95";
        $arrSystem['Win 32'] = "Windows 95";
        $arrSystem['Win95'] = "Windows 95";
        $arrSystem['Windows 95/NT'] = "Windows 95";
        $arrSystem['Win98'] = "Windows 98";
        $arrSystem['Windows 95'] = "Windows 95";
        $arrSystem['Windows 98'] = "Windows 98";
        $arrSystem['Windows NT 5.0'] = "Windows 2000";
        $arrSystem['Windows NT 5.1'] = "Windows XP";
        $arrSystem['Windows NT'] = "Windows NT";
        $arrSystem['WinNT'] = "Windows NT";
        $arrSystem['Windows ME'] = "Windows ME";
        $arrSystem['Windows CE'] = "Windows CE";
        $arrSystem['Windows'] = "Windows 95";
        $arrSystem['Mac_68000'] = "Macintosh";
        $arrSystem['Mac_PowerPC'] = "Macintosh";
        $arrSystem['Mac_68K'] = "Macintosh";
        $arrSystem['Mac_PPC'] = "Macintosh";
        $arrSystem['Macintosh'] = "Macintosh";
        $arrSystem['IRIX'] = "Unix";
        $arrSystem['SunOS'] = "Unix";
        $arrSystem['AIX'] = "Unix";
        $arrSystem['Linux'] = "Unix";
        $arrSystem['HP-UX'] = "Unix";
        $arrSystem['SCO_SV'] = "Unix";
        $arrSystem['FreeBSD'] = "Unix";
        $arrSystem['BSD/OS'] = "Unix";
        $arrSystem['OS/2'] = "OS/2";
        $arrSystem['WebTV/1.0'] = "WebTV/1.0";
        $arrSystem['WebTV/1.2'] = "WebTV/1.2";

        $arrBrowser['Lynx'] = "Lynx";
        $arrBrowser['libwww-perl'] = "Lynx";
        $arrBrowser['ia_archiver'] = "Crawler";
        $arrBrowser['ArchitextSpider'] = "Crawler";
        $arrBrowser['Lycos_Spider_(T-Rex)'] = "Crawler";
        $arrBrowser['Scooter'] = "Crawler";
        $arrBrowser['InfoSeek'] = "Crawler";
        $arrBrowser['AltaVista'] = "Crawler";
        $arrBrowser['Eule-Robot'] = "Crawler";
        $arrBrowser['SwissSearch'] = "Crawler";
        $arrBrowser['Checkbot'] = "Crawler";
        $arrBrowser['Crescent Internet ToolPak'] = "Crawler";
        $arrBrowser['Slurp'] = "Crawler";
        $arrBrowser['WiseWire-Widow'] = "Crawler";
        $arrBrowser['NetAttache'] = "Crawler";
        $arrBrowser['Web21 CustomCrawl'] = "Crawler";
        $arrBrowser['CheckUrl'] = "Crawler";
        $arrBrowser['LinkLint-checkonly'] = "Crawler";
        $arrBrowser['Namecrawler'] = "Crawler";
        $arrBrowser['ZyBorg'] = "Crawler";
        $arrBrowser['Googlebot'] = "Crawler";
        $arrBrowser['WebCrawler'] = "Crawler";
        $arrBrowser['WebCopier'] = "Crawler";
        $arrBrowser['JBH Agent 2.0'] = "Crawler";
Я вам отвечаю, что браузеров и операционных он определяет "слегка" побольше :)
Back to top
View user's profile Send private message Send e-mail
DmitriyPopov
Участник форума



Joined: 10 Mar 2003
Posts: 1491
Карма: 22
   поощрить/наказать


PostPosted: Fri Mar 28, 2003 9:40 am (спустя 19 минут)
   Post subject:
Reply with quote

Если интересно - есть два года назад написанная ф-ция:
www.programmist.spb.ru/brw/

И есть так же таблица заголовков USER-AGENT (если не критично, что год онеа не обновлялась).:
www.programmist.spb.ru/user_agents/
Back to top
View user's profile Send private message
Юрий Насретдинов
Модератор



Joined: 13 Mar 2003
Posts: 8642
Карма: 198
   поощрить/наказать

Location: 007 495

PostPosted: Sun Apr 06, 2003 2:36 pm (спустя 9 дней 4 часа 56 минут)
   Post subject:
Reply with quote

хехе :) За год мало чего изменилось...
Back to top
View user's profile Send private message Send e-mail
Алекс Грушевой
Заглянувший



Joined: 06 Jun 2003
Posts: 5
Карма: 0
   поощрить/наказать

Location: Челябинск

PostPosted: Sat Jun 14, 2003 7:10 am (спустя 2 месяца 7 дней 16 часов 33 минуты)
   Post subject:
Reply with quote

Хе-Хе. Если бы еще страницы доступны были, было бы вообще зашибись!!
Back to top
View user's profile Send private message Send e-mail
JwsD
Guest





Карма: 388
   поощрить/наказать


PostPosted: Fri Feb 01, 2008 7:02 pm (спустя 4 года 7 месяцев 17 дней 11 часов 52 минуты; написано за 1 минуту 2 секунды)
   Post subject:
Reply with quote

Если я не в тему. Но вот тут в одном моде для фужина нашел цикл.
Он просто тупо скопинный но ничё. Если разобратся то пойдет. :)
Quote:
$http_u_a = strtolower(rawurldecode($_SERVER['HTTP_USER_AGENT']));
            if(eregi('opera ([0-9]+\.[0-9]+)', $http_u_a, $regs)){
                $browser = "Opera ".$regs[1];
            }
            elseif(eregi('msie ([0-9]+\.[0-9]+)', $http_u_a, $regs)){
                $browser = "Microsoft Internet Explorer ".$regs[1];
            }
            elseif(eregi('lynx/([0-9]+\.[0-9]+\.[0-9]+)', $http_u_a, $regs)){
                $browser = "Lynx ".$regs[1];
            }
            elseif((eregi('bot', $http_u_a)) || (eregi('google', $http_u_a)) || (eregi('slurp', $http_u_a)) || (eregi('scooter', $http_u_a)) || (eregi('spider', $http_u_a)) || (eregi('crawler', $http_u_a)) || (eregi('archiver', $http_u_a))){
                $browser = LANGSTATS_050;
            }
            elseif(eregi('netscape6/([0-9]+\.[0-9]+\.[0-9]+)', $http_u_a, $regs)){
                $browser = "Netscape ".$regs[1];
            }
            elseif (eregi('mozilla/(.?)firefox/([0-9]{0,2}\.[0-9]{0,2}\.[0-9]{0,2})', $http_u_a, $regs)){
                $browser = "Mozilla Firefox ".$regs[1];
            }
            elseif (eregi('mozilla/([0-9]+\.[0-9]+)', $http_u_a, $regs)){
                $browser = "Mozilla ".$regs[1];
            }
            else{
                $browser = LANGSTATS_051;
            }
            if(eregi("(win|windows)[ ]*((nt)*[ /]*([0-9]+(.?[0-9]+))*)", $http_u_a, $regs)){
                if(eregi("(win|windows)[ ](95)", $http_u_a)){
                    $os = 'Windows 95';
                }
                elseif(eregi("(win|windows)[ ](98)", $http_u_a)){
                    $os = 'Windows 98';
                }
                elseif(eregi("(win|windows)[ ](me)", $http_u_a)){
                    $os = 'Windows ME';
                }
                elseif(eregi("(win|windows)[ ](nt)", $http_u_a)){
                    if(eregi("(win|windows)[ ](nt)[ ](5.1)", $http_u_a)){
                        $os = 'Windows XP';
                    }
                    elseif(eregi("(win|windows)[ ](nt)[ ](5.0)", $http_u_a)){
                        $os = 'Windows 2000';
                    }
                    else{
                        $os = 'Windows NT';
                    }
                }
                else{
                    $os = 'Windows';
                }
            }
            elseif(stristr($http_u_a, "linux")){
                $os = 'Linux';
            }
            elseif(stristr($http_u_a, "unix")){
                $os = 'Unix';
            }
            elseif(stristr($http_u_a, "mac")){
                $os = 'MacOS';
            }
            elseif(stristr($http_u_a, "ppc")){
                $os = 'MacOS';
            }
            else{
                $os = LANGSTATS_051;
            }
Back to top
eternalko
Участник форума



Joined: 06 Jan 2008
Posts: 34
Карма: 0
   поощрить/наказать


PostPosted: Tue Feb 19, 2008 2:29 am (спустя 17 дней 7 часов 27 минут; написано за 43 секунды)
   Post subject:
Reply with quote

Мне этот понравился.
garetjax.info/projects/browscap/

Пользуемся на здоровье!
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic All times are GMT + 3 Hours
Page 1 of 1    Email to a Friend.
You cannot post new topics in this forum. You cannot reply to topics in this forum. You cannot edit your posts in this forum. You cannot delete your posts in this forum. You cannot vote in polls in this forum. You cannot attach files in this forum. You can download files in this forum.
XML