я юзаю эти две функции... иногда бывают глюки но в 98% случаев все отрабатывает отлично.
function str_to_os($browser_string)
{
$os=array(
"Mac68K",
"MacOSX",
"MacPPC",
"WinME",
"Win16",
"Win95",
"Win98",
"Win2000",
"WinXP",
"WinNT",
"Unix",
"Linux",
"Amiga",
"Win32",
"WinCE",
"FreeBSD",
"BeOS",
"OS/2"
);
$os_pattern=array(
"68K"=>0,
"Mac OS X"=>1,
"PPC"=>2,
"Win 9x 4.90"=>3,
"Win3.11"=>4,
"Win95"=>5,
"Win98"=>6,
"Windows NT 5.0"=>7,
"Windows NT 5.1"=>8,
"WinNT4.0"=>9,
"Win16"=>4,
"Windows 95"=>5,
"Windows 98"=>6,
"Windows NT 4.0"=>9,
"Windows NT"=>9,
"Unix"=>10,
"X11"=>11,
"Linux"=>11,
"AmigaOS5.0"=>12,
"AmigaOS 3.1"=>12,
"Mac_68000"=>0,
"Mac_PowerPC"=>2,
"Windows 3.1"=>4,
"Win 32"=>13,
"Windows CE"=>14,
"Win3.1"=>4,
"Win32"=>13,
"Windows XP"=>8,
"FreeBSD"=>15,
"BeOS"=>16,
"Win2000"=>7,
"OS/2"=>17,
"SunOS"=>11,
"WinNT5.0"=>7,
"WinNT5.1"=>8,
"Win9x 4.90"=>3,
"Mac_OSX"=>1,
"Windows 2000"=>7,
"Windows ME"=>3,
"Windows/32"=>13,
"WinNT"=>9
);
$found="Other";
foreach ($os_pattern as $pattern=>$os_num)
{
if (stristr($browser_string,$pattern))
{
$found=$os[$os_num];
break;
}
}
return $found;
}
function identify_browser($agent)
{
if (eregi(\'Opera.([0-9].[0-9]{1,2})\',$agent,$version)):
$browser_type="Opera";
$browser_version=$version[1];
elseif (eregi(\'MSIE.([0-9].[0-9]{1,2})\',$agent,$version)):
$browser_type="IE";
$browser_version=$version[1];
elseif (eregi(\'Netscape([0-9])\',$agent,$version) or ereg(\'Netscape/([0-9])\',$agent,$version)):
$browser_type="Netscape";
$browser_version=$version[1];
elseif (eregi(\'Gecko\',$agent)):
$browser_type="Mozilla";
if (eregi(\'rv:(.*))\',$agent,$version))
$browser_version=$version[1];
else
$browser_version="";
elseif (eregi(\'Mozilla/([0-9].[0-9]{1,2})\',$agent,$version)):
$browser_type="Netscape";
$browser_version=$version[1];
elseif (eregi(\'bot\',$agent)):
$browser_type="Bot";
$browser_version="Other";
else:
$browser_type="Other";
$browser_version="Other";
endif;
$browser_os=str_to_os($agent);
return array($browser_type,$browser_version,$browser_os);
}