[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Браузер, ОС, тип устройства
sh47n
Скажите, есть ли способ средствами PHP определить браузер клиента, версию его операционной системы и тип его устройства мобильное устройство или компьютер?
В сети полно скриптов и dll этих целей. Точно не работает ни один.
Браузер:
<?
function
user_browser($agent) {
// регулярное выражение, которое позволяет отпределить 90% браузеров
preg_match("/(Trident|MSIE|Opera|Firefox|Chrome|CriOS|Version|Opera Mini|Netscape|Konqueror|SeaMonkey|Camino|Minefield|Iceweasel|K-Meleon|Maxthon)(?:\/| )([0-9.]+)/", $agent, $browser_info);
list(,$browser,$version) = $browser_info; // получаем данные из массива в переменную
if (preg_match("/Opera ([0-9.]+)/i", $agent, $opera)) return 'Opera '.$opera[1]; // определение _очень_старых_ версий Оперы (до 8.50), при желании можно убрать
if ($browser == 'MSIE') { // если браузер определён как IE
preg_match("/(Maxthon|Avant Browser|MyIE2)/i", $agent, $ie); // проверяем, не разработка ли это на основе IE
if ($ie) return $ie[1].' based on IE '.$version; // если да, то возвращаем сообщение об этом
return 'IE '.$version; // иначе просто возвращаем IE и номер версии
}
if ($browser == 'Trident'){
if(preg_match('/Trident.*rv.(\\d+)\\.\\d+/i', $agent, $ie) === 1 ){ // special case for IE 11
// sample ie header
// Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko


$version = ( isset($ie[1]) ) ? $ie[1] : '?';
return 'IE '.$version;
}
}

if ($browser == 'Firefox') { // если браузер определён как Firefox
preg_match("/(Flock|Navigator|Epiphany)\/([0-9.]+)/", $agent, $ff); // проверяем, не разработка ли это на основе Firefox
if ($ff) return $ff[1].' '.$ff[2]; // если да, то выводим номер и версию
}
if ($browser == 'Opera' && $version == '9.80') return 'Opera '.substr($agent,-5); // если браузер определён как Opera 9.80, берём версию Оперы из конца строки
if ($browser == 'CriOS') return 'Chrome '.$version; // определяем ChromeMobile from
if ($browser == 'Version') return 'Safari '.$version; // определяем Сафари
if (!$browser && strpos($agent, 'Gecko')) return 'Browser based on Gecko'; // для неопознанных браузеров проверяем, если они на движке Gecko, и возращаем сообщение об этом
return $browser.' '.$version; // для всех остальных возвращаем браузер и версию
}

?>

Под андроид 7 FF 52, обзывает FF 52 или FF 53 если сделать рефреш.
ОС
<?
function
getOS($userAgent) {
$oses = array(
'iPhone' => '(iPhone)',
'Windows 3.11' => 'Win16',
'Windows 95' => '(Windows 95)|(Win95)|(Windows_95)',
'Windows 98' => '(Windows 98)|(Win98)',
'Windows 2000' => '(Windows NT 5.0)|(Windows 2000)',
'Windows XP' => '(Windows NT 5.1)|(Windows XP)',
'Windows 2003' => '(Windows NT 5.2)',
'Windows Vista' => '(Windows NT 6.0)|(Windows Vista)',
'Windows 7' => '(Windows NT 6.1)|(Windows 7)',
'Windows NT 4.0' => '(Windows NT 4.0)|(WinNT4.0)|(WinNT)|(Windows NT)',
'Windows ME' => 'Windows ME',
'Open BSD'=>'OpenBSD',
'Sun OS'=>'SunOS',
'Linux'=>'(Linux)|(X11)',
'Safari' => '(Safari)',
'Macintosh'=>'(Mac_PowerPC)|(Macintosh)',
'QNX'=>'QNX',
'BeOS'=>'BeOS',
'OS/2'=>'OS/2',
'Search Bot'=>'(nuhk)|(Googlebot)|(Yammybot)|(Openbot)|(Slurp/cat)|(msnbot)|(ia_archiver)'
);
foreach($oses as $os=>$pattern){
if(preg_match('#'.$pattern.'#i', $userAgent)) return $os;
}
return 'Unknown';
}
?>

Из FF виндоус 7 называет вистой, в тоже время из хрома или из IE работает правильно.
$_SERVER['HTTP_USER_AGENT'] из FF не правильно посылает в поток Windows NT 6.0 из под 7

С типом устройства еще круче. Скриптов не нашел, нашел несколько dll библиотек, созданных на Embarcadero RAD Studio XE и C#(так авторы пишут). virustotal назвал эти библиотеки вирусами.

Информация нужна не столько для статистики, сколько для изменения CSS, которые работают не правильно под разными браузерами, разными ОС и на разных железяках.
Напр. нормально работающий на компьютерах fieldset, на планшете самсунг под андроид 6 работает терпимо, под андроид 7, внутренний текст вылазит. На мобильных телефонах самсунг еще хуже. Там еще проблемы с тегом td(table).

P.S. meta с viewport помогает не на всех устройствах и не под всеми андроидами.
Быстрый ответ:

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