Blog. Just Blog

Определение браузера посетителя сайта на PHP

Версия для печати Добавить в Избранное Отправить на E-Mail | Категория: Web-мастеру и не только | Автор: ManHunter
Для сбора внутренней статистики я написал простую функцию для определения браузеров посетителей сайта. За несколько месяцев активной "дрессировки" в нее были добавлены сигнатуры практически всех популярных браузеров, и вот уже достаточно длительное время она не обновляется. Информация берется из переменной окружения HTTP_USER_AGENT, но так как строка идентификации браузера формируется на стороне пользователя, то она может быть легко подделана. Например, при помощи расширения User Agent Switcher для браузера Firefox или какого-нибудь локального прокси-сервера. Поэтому 100% достоверной эту информацию считать никак нельзя. Но для подавляющего большинства случаев ее будет вполне достаточно. Функция возвращает строку с названием браузера и его версией типа Internet Explorer 6.0, Mozilla Firefox 3.0.14, или же Unknown, если браузер определить не удалось.
  1. //-------------------------------------------------------------------
  2. // Функция определения браузера по данным поля User-Agent
  3. //-------------------------------------------------------------------
  4. function GetUserAgent() {
  5.   // Получить переменную окружения
  6.   $str=getenv('HTTP_USER_AGENT');
  7.   // Попытаться определить известные браузеры по сигнатурам
  8.   if (strpos($str,"Avant Browser",0)!==false) {
  9.     return "Avant Browser";
  10.   }
  11.   elseif (strpos($str,"Acoo Browser",0)!==false) {
  12.     return "Acoo Browser";
  13.   }
  14.   elseif (eregi("Iron/([0-9a-z\.]*)",$str,$pocket)) {
  15.     return "SRWare Iron ".$pocket[1];
  16.   }
  17.   elseif (eregi("Chrome/([0-9a-z\.]*)",$str,$pocket)) {
  18.     return "Google Chrome ".$pocket[1];
  19.   }
  20.   elseif (eregi("(Maxthon|NetCaptor)( [0-9a-z\.]*)?",$str,$pocket)) {
  21.     return $pocket[1].$pocket[2];
  22.   }
  23.   elseif (strpos($str,"MyIE2",0)!==false) {
  24.     return "MyIE2";
  25.   }
  26.   elseif (eregi("(NetFront|K-Meleon|Netscape|Galeon|Epiphany|Konqueror|".
  27.           "Safari|Opera Mini)/([0-9a-z\.]*)",$str,$pocket)) {
  28.     return $pocket[1]." ".$pocket[2];
  29.   }
  30.   elseif (eregi("Opera[/ ]([0-9a-z\.]*)",$str,$pocket)) {
  31.     return "Opera ".$pocket[1];
  32.   }
  33.   elseif (eregi("Orca/([ 0-9a-z\.]*)",$str,$pocket)) {
  34.     return "Orca Browser ".$pocket[1];
  35.   }
  36.   elseif (eregi("(SeaMonkey|Firefox|GranParadiso|Minefield|".
  37.           "Shiretoko)/([0-9a-z\.]*)",$str,$pocket)) {
  38.     return "Mozilla ".$pocket[1]." ".$pocket[2];
  39.   }
  40.   elseif (eregi("rv:([0-9a-z\.]*)",$str,$pocket) &&
  41.           strpos($str,"Mozilla/",0)!==false) {
  42.     return "Mozilla ".$pocket[1];
  43.   }
  44.   elseif (eregi("Lynx/([0-9a-z\.]*)",$str,$pocket)) {
  45.     return "Lynx ".$pocket[1];
  46.   }
  47.   elseif (eregi("MSIE ([0-9a-z\.]*)",$str,$pocket)) {
  48.     return "Internet Explorer ".$pocket[1];
  49.   }
  50.   else {
  51.     // Это какой-то неизвестный браузер
  52.     return "Unknown";
  53.   }
  54. }
Кроме статистики определение браузера посетителя можно использовать для переадресации или выдачи определенных страниц сайта, показа целевых информационных блоков, подгонки стилей или дизайна и т.п. При необходимости функцию можно легко расширить собственными сигнатурами, например, добавить определение поисковых роботов. Для определения браузеров мобильных устройств используется отдельный скрипт.

Поделиться ссылкой ВКонтакте
Просмотров: 19416 | Комментариев: 16

Метки: PHP, браузеры
Внимание! Статья опубликована больше года назад, информация могла устареть!

Комментарии

Отзывы посетителей сайта о статье
netu (01.10.2012 в 23:20):
а теперь eregi меняем на preg_match :)
Евген (07.04.2012 в 22:09):
Код - то что надо.
Алекс (06.01.2012 в 03:35):
JhonTrade, спасибо, действительно ваш класс удобнее)
JhonTrade (02.01.2012 в 22:32):
А я в своих проектах использую этот класс
http://intsystem.org/141/user-browser-detect/
Дмитрий (22.12.2011 в 20:29):
Огромное спасибо за код! Очень помогло =)
Виталий (13.11.2011 в 22:16):
Круто, супер, ваще класс.
Спасибо
Grafe (14.12.2010 в 14:21):
спасибо, чувак)) алсо, сигнатура про проггера зарабатывает 1000 очков))
Евгений (09.10.2010 в 23:25):
Спасибо.
IE - в топку.
Роман (13.08.2010 в 16:20):
спасибо, помогло
теперь на страници блоки выводят разный контент в зависимости от браузера :)
Александр (07.07.2010 в 00:14):
Спасибо за функцию. Очень пригодилась. IE ниже 7 не просто глючный, а ужасно. Наверное худший браузер в мире.
Евгений (06.07.2010 в 09:16):
Спасибо!
Dragon (08.05.2010 в 11:06):
Спасибо! Всё отлично работает! Теперь для глючного IE загружается страница с упрощённым дизайном, ато обычную он закосячивал
Андрей (05.02.2010 в 14:33):
Спасибо. Коротко, понятно и работает.
MaxIkar (16.11.2009 в 11:30):
Да, на шаред, увы, не прокатит :(
ManHunter (16.11.2009 в 11:12):
Ага, это если резвишься на своем серваке и есть доступ к php.ini
MaxIkar (16.11.2009 в 11:01):
http://php.net/get_browser
Предпочитаю стандартную функцию, т.к. можно обновлять browscap.ini и получать свежую инфу о новых версиях браузеров

Добавить комментарий

Заполните форму для добавления комментария
Имя*:
Текст комментария (не более 2000 символов)*:

*Все поля обязательны для заполнения.
Комментарии, содержащие рекламу, ненормативную лексику, оскорбления и т.п., а также флуд и сообщения не по теме, будут удаляться. Нарушителям может быть заблокирован доступ к сайту.
Наверх
Powered by PCL's Speckled Band Engine 0.2 RC3
© ManHunter / PCL, 2008-2024
При использовании материалов ссылка на сайт обязательна
Время генерации: 0.06 сек. / MySQL: 2 (0.004 сек.) / Память: 4.5 Mb
Наверх