
участник Винграда
  
Профиль
Группа: Завсегдатай
Сообщений: 1528
Регистрация: 7.7.2006
Где: Москва
Репутация: 8 Всего: 32
|
А вот мой вариант. Это переделанный класс PEAR  , я его упростил, ускорил и добавил 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'](она врет  ). На мой взляд этот вариант самый "полный" из сдесь присутствующих.
|