[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: HTTP_USER_AGENT распарсить
olgatcpip
Всем ПРИВЕТ!

Я знаю, что переменная $_SERVER содержит в себе много интересного, например IP (REMOTE_ADDR - это я использую для определения IP)

Далее мне нужно определить браузер и ОС По сути распарсить значение HTTP_USER_AGENT
Для этого посмотрела в википедию , а конкретно Примеры значений User Agent
Разнообразие шокирует. Я как должна определять это все??


Есть ли у кого готовое решение, хоть примерно, поделитесь, пожалуйста.
Например совсем не понимаю, как по моим заголовкам определить, что у меня windows 7....

В идеале, нужно уметь создать такое http://www.avito.ru/help



Спустя 30 минут, 58 секунд (5.02.2012 - 07:36) Каретный написал(а):
Самый лучший вариант помоему
вот еще тут
browscap

получаем массив вида

Array
(
[
browser_name_regex] => §^mozilla/5\.0 \(.*windows nt 5\.1.*\) applewebkit/.* \(khtml, like gecko\).*chrome/16\..*safari/.*
[browser_name_pattern] => Mozilla/5.0 (*Windows NT 5.1*) AppleWebKit/* (KHTML, like Gecko)*Chrome/16.*Safari/*
[parent] => Chrome 16.0
[platform] => WinXP
[browser] => Chrome
[version] => 16.0
[majorver] => 16
[win32] => 1
[frames] => 1
[iframes] => 1
[tables] => 1
[cookies] => 1
[javascript] => 1
[javaapplets] => 1
[cssversion] => 3
[minorver] => 0
[alpha] =>
[beta] =>
[win16] =>
[win64] =>
[backgroundsounds] =>
[vbscript] =>
[activexcontrols] =>
[isbanned] =>
[ismobiledevice] =>
[issyndicationreader] =>
[crawler] =>
[aolversion] => 0
)

нас интересует

[browser] => Chrome
[version] => 16.0



Спустя 41 минута, 16 секунд (5.02.2012 - 08:17) olgatcpip написал(а):
Хорошее решение, но как определить не только какая ОС, но и версию?

Спустя 33 минуты, 25 секунд (5.02.2012 - 08:51) Каретный написал(а):
'HTTP_USER_AGENT' => string 'Opera/9.80 (Windows NT 5.1; U; ru) Presto/2.10.229 Version/11.61'

парсить

Спустя 27 минут, 44 секунды (5.02.2012 - 09:18) olgatcpip написал(а):
Цитата
'HTTP_USER_AGENT' => string 'Opera/9.80 (Windows NT 5.1; U; ru) Presto/2.10.229 Version/11.61'

парсить

И как по Windows NT 5.1; U; ru понимать версию виндовс. + разные браузеры шлют этот текст по рпзному sad.gif

для примера
Mozilla/5.0 (Windows NT 6.1; WOW64; rv:9.0.1) Gecko/20100101 Firefox/9.0.1
Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50
Opera/9.80 (Windows NT 6.1; U; ru) Presto/2.10.229 Version/11.60

Спустя 5 минут, 59 секунд (5.02.2012 - 09:24) Каретный написал(а):
$system['Windows 3.1'] = "Windows 3.1";
$system['Win16'] = "Windows 3.1";
$system['16bit'] = "Windows 3.1";
$system['Win32'] = "Windows 95";
$system['32bit'] = "Windows 95";
$system['Win 32'] = "Windows 95";
$system['Win95'] = "Windows 95";
$system['Windows 95/NT'] = "Windows 95";
$system['Win98'] = "Windows 98";
$system['Windows 95'] = "Windows 95";
$system['Windows 98'] = "Windows 98";
$system['Windows NT 5.0'] = "Windows 2000";
$system['Windows NT 5.1'] = "Windows XP";
$system['Windows NT 6.1'] = "Windows 7";
$system['Windows NT'] = "Windows NT";
$system['WinNT'] = "Windows NT";
$system['Windows ME'] = "Windows ME";
$system['Windows CE'] = "Windows CE";
$system['Windows'] = "Windows 95";
$system['Mac_68000'] = "Macintosh";
$system['Mac_PowerPC'] = "Macintosh";
$system['Mac_68K'] = "Macintosh";
$system['Mac_PPC'] = "Macintosh";
$system['Macintosh'] = "Macintosh";
$system['IRIX'] = "Unix";
$system['SunOS'] = "Unix";
$system['AIX'] = "Unix";
$system['Linux'] = "Unix";
$system['HP-UX'] = "Unix";
$system['SCO_SV'] = "Unix";
$system['FreeBSD'] = "Unix";
$system['BSD/OS'] = "Unix";
$system['OS/2'] = "OS/2";
$system['WebTV/1.0'] = "WebTV/1.0";
$system['WebTV/1.2'] = "WebTV/1.2";


Вобще погуглите, там много инфы по этому поводу, выбирите удобный для вас вариант.

Спустя 6 минут, 58 секунд (5.02.2012 - 09:31) olgatcpip написал(а):
А это ты от куда взял?

Спустя 5 минут, 20 секунд (5.02.2012 - 09:37) Каретный написал(а):
Не вспомню сейчас.

в вики по ссылке выше соответствия есть

Platform
Win16: Windows 3.x
Win95: Windows 95, где SubPlatform могла быть:
16bit для 16-bit версий Netscape
Win98: Windows 98
WinNT: Windows NT 3.x
Windows NT 5.0: Windows 2000
Windows NT 5.1: Windows XP

Спустя 19 минут, 24 секунды (5.02.2012 - 09:56) olgatcpip написал(а):
Спасибо, я решила использовать такую функцию

public function getOS($u_agent)
{
$system['Windows 3.1'] = "Windows 3.1";
$system['Win16'] = "Windows 3.1";
$system['16bit'] = "Windows 3.1";
$system['Win32'] = "Windows 95";
$system['32bit'] = "Windows 95";
$system['Win 32'] = "Windows 95";
$system['Win95'] = "Windows 95";
$system['Windows 95/NT'] = "Windows 95";
$system['Win98'] = "Windows 98";
$system['Windows 95'] = "Windows 95";
$system['Windows 98'] = "Windows 98";
$system['Windows NT 5.0'] = "Windows 2000";
$system['Windows NT 5.1'] = "Windows XP";
$system['Windows NT 6.1'] = "Windows 7";
$system['Windows NT'] = "Windows NT";
$system['WinNT'] = "Windows NT";
$system['Windows ME'] = "Windows ME";
$system['Windows CE'] = "Windows CE";
$system['Windows'] = "Windows 95";
$system['Mac_68000'] = "Macintosh";
$system['Mac_PowerPC'] = "Macintosh";
$system['Mac_68K'] = "Macintosh";
$system['Mac_PPC'] = "Macintosh";
$system['Macintosh'] = "Macintosh";
$system['IRIX'] = "Unix";
$system['SunOS'] = "Unix";
$system['AIX'] = "Unix";
$system['Linux'] = "Unix";
$system['HP-UX'] = "Unix";
$system['SCO_SV'] = "Unix";
$system['FreeBSD'] = "Unix";
$system['BSD/OS'] = "Unix";
$system['OS/2'] = "OS/2";
$system['WebTV/1.0'] = "WebTV/1.0";
$system['WebTV/1.2'] = "WebTV/1.2";

preg_match("/\(([^;]+);/ui",$u_agent,$out);
if(!$out)
return 'UNKNOWN';
$key = $out[1];
if(getElement($system, $key))
return $system[$key];

return 'UNKNOWN';
}



Спустя 2 минуты, 56 секунд (5.02.2012 - 09:59) johniek_comp написал(а):
можно через stristr(), будет намного проще
if ( stristr($_SERVER['HTTP_USER_AGENT'], 'Firefox') ) echo 'firefox';
elseif ( stristr($_SERVER['HTTP_USER_AGENT'], 'Chrome') ) echo 'chrome';
elseif ( stristr($_SERVER['HTTP_USER_AGENT'], 'Safari') ) echo 'safari';
elseif ( stristr($_SERVER['HTTP_USER_AGENT'], 'Opera') ) echo 'opera';
elseif ( stristr($_SERVER['HTTP_USER_AGENT'], 'MSIE 8.0') ) echo 'ie8';
elseif ( stristr($_SERVER['HTTP_USER_AGENT'], 'MSIE 7.0') ) echo 'ie7';
elseif ( stristr($_SERVER['HTTP_USER_AGENT'], 'MSIE 6.0') ) echo 'ie6';

Спустя 6 дней, 23 часа, 32 минуты, 15 секунд (12.02.2012 - 09:31) olgatcpip написал(а):
Я объединила решения
public function getOS($u_agent)
{
$system['Windows 3.1'] = "Windows 3.1";
$system['Win16'] = "Windows 3.1";
$system['16bit'] = "Windows 3.1";
$system['Win32'] = "Windows 95";
$system['32bit'] = "Windows 95";
$system['Win 32'] = "Windows 95";
$system['Win95'] = "Windows 95";
$system['Windows 95/NT'] = "Windows 95";
$system['Win98'] = "Windows 98";
$system['Windows 95'] = "Windows 95";
$system['Windows 98'] = "Windows 98";
$system['Windows NT 5.0'] = "Windows 2000";
$system['Windows NT 5.1'] = "Windows XP";
$system['Windows NT 6.1'] = "Windows 7";
$system['Windows NT'] = "Windows NT";
$system['WinNT'] = "Windows NT";
$system['Windows ME'] = "Windows ME";
$system['Windows CE'] = "Windows CE";
$system['Windows'] = "Windows 95";
$system['Mac_68000'] = "Macintosh";
$system['Mac_PowerPC'] = "Macintosh";
$system['Mac_68K'] = "Macintosh";
$system['Mac_PPC'] = "Macintosh";
$system['Macintosh'] = "Macintosh";
$system['IRIX'] = "Unix";
$system['SunOS'] = "Unix";
$system['AIX'] = "Unix";
$system['Linux'] = "Unix";
$system['HP-UX'] = "Unix";
$system['SCO_SV'] = "Unix";
$system['FreeBSD'] = "Unix";
$system['BSD/OS'] = "Unix";
$system['OS/2'] = "OS/2";
$system['WebTV/1.0'] = "WebTV/1.0";
$system['WebTV/1.2'] = "WebTV/1.2";

foreach($system as $k=>$os)
{
if ( stristr($u_agent, $k) )
return $os;
}
return 'UNKNOWN';
}


_____________
Ласковое слово и кошке приятно... Плюсик в карму сойдет wink.gif
*smarty дока - новая любовь
Моё рукотворение ругайте, хвалите smile.gif
Веду маленький блог
в этом блоге публикую новые работы
WMR217126627282 wink.gif

Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.