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. }
Кроме статистики определение браузера посетителя можно использовать для переадресации или выдачи определенных страниц сайта, показа целевых информационных блоков, подгонки стилей или дизайна и т.п. При необходимости функцию можно легко расширить собственными сигнатурами, например, добавить определение поисковых роботов. Для определения браузеров мобильных устройств используется отдельный скрипт.

Поделиться ссылкой ВКонтакте Поделиться ссылкой на Facebook Поделиться ссылкой на LiveJournal Поделиться ссылкой в Мой Круг Добавить в Мой мир Добавить на ЛиРу (Liveinternet) Добавить в закладки Memori Добавить в закладки Google
Просмотров: 17238 | Комментариев: 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-2017
При использовании материалов ссылка на сайт обязательна
Время генерации: 0.07 сек. / MySQL: 2 (0.0039 сек.) / Память: 4.5 Mb
Наверх