PHP веб, концепции работы идентификация и перенаправление браузера, определение операционной


Информация о пользователе на PHP — IP, браузер, операционная система, робот

Недавно мне нужно было узнать название браузера посетителя сайта, для того чтобы запретить доступ к сайту определенному браузеру. Занятие глупое, т.к. любой пользователь на сайте должен чувствовать себя комфортно невзирая на каком он браузере, но с заказчиком не поспоришь, видимо дизайн сайта не работал под определенный браузер. В данном случае стоило сменить дизайнера а не жертвовать посетителями. Я не остановился только на определение браузера, мне хотелось добавить в него больше функционала для возможных будущих проверок. В итоге, класс получился весьма компактным и динамичным в изменениях.

На данный момент он выдает:

  1. Название браузера
  2. Версия браузера
  3. Название операционной системы
  4. Версия/ядро операционной системы
  5. IP посетителя
  6. проверка: зашел ли пользователь с браузера
  7. проверка: зашел ли пользователь с мобильного устройства
  8. Название марки/ос/браузера мобильного телефона, смартфона, планшета
  9. проверка: является ли посетитель роботом поисковых систем
  10. Какой поисковой системы принадлежит робот

Как работает PHP класс определение данных посетителя по user-agent

Из папки arrays загружаются ассоциативные массивы которые содержат аббревиатуры или короткие название браузеров, операционных систем или роботов которые встречаются в строке user-agent которую мы получаем от браузера.

После получения данных, динамично вызываются все методы которые имеют префикс set_ и заполняют переменные класса, т.к. только они являются публичными и можно вывести из за пределы видимости класса.

Вот пример как выглядит массив с браузерами. Переменную которая будет содержать сам массив указывать не нужно, достаточно начать код с return. Если данный файл вызвать через require или require_once и результат выполнения присвоить переменной, то данная переменная будет содержать в себе массив (как это делает метод $this->load() в нашем классе).

Описание работы методов класса

Главный метод конструктор «__construct» в момент вызова класса AboutGuest он выполняется первым, тем самым играет ключевую роль в работе класса. Первым делом создает массивы данных для работы остальных методов. Объект $this->agent содежит в себе ничто иное как $_SERVER[‘HTTP_USER_AGENT’] которого мы получаем от браузера и из него вытаскиваем нужную нам информацию.

Личный блог веб-разработчика.

Последней моей задачей было создание функции определения ОС, поскольку нужно было знать зашёл пользователь на сайт с windows или с другой ОС. Чтобы не изобретать велосипед, я начал гуглить, и нашёл:

‘(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(eregi($pattern, $userAgent)) < return $os; >> return ‘Unknown’; > ?>

Но сервер ругался на функцию eregi(), открыв документацию, я узнал что функция устарела, и лучше пользоваться preg_match().

Функция eregi() по умолчанию определяет совпадение с регулярным выражением БЕЗ учёта регистра символов, то и preg_match() пришлось изменить, добавив символ /i после закрывающего ограничителя шаблона, для регистронезависимого поиска.

Таким образом получим код:

‘(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’; > ?>

Массив операционных систем можно дополнить, если хорошенько поискать возможные значения ОС в HTTP_USER_AGENT.

‘(Win16)’, ‘Windows 95’ => ‘(Windows 95)|(Win95)|(Windows_95)’, ‘Windows 98’ => ‘(Windows 98)|(Win98)’, ‘Windows 2000’ => ‘(Windows NT 5.0)|(Windows 2000)’, ‘Windows 2000 Service Pack 1’ => ‘(Windows NT 5.01)’, ‘Windows XP’ => ‘(Windows NT 5.1)|(Windows XP)’, ‘Windows Server 2003’ => ‘(Windows NT 5.2)’, ‘Windows Vista’ => ‘(Windows NT 6.0)|(Windows Vista)’, ‘Windows 7’ => ‘(Windows NT 6.1)|(Windows 7)’, ‘Windows 8’ => ‘(Windows NT 6.2)|(Windows 8)’, ‘Windows NT 4.0’ => ‘(Windows NT 4.0)|(WinNT4.0)|(WinNT)|(Windows NT)’, ‘Windows ME’ => ‘(Windows ME)|(Windows 98; Win 9x 4.90 )’, ‘Windows CE’ => ‘(Windows CE)’, // UNIX Like Operating Systems ‘Mac OS X Kodiak (beta)’ => ‘(Mac OS X beta)’, ‘Mac OS X Cheetah’ => ‘(Mac OS X 10.0)’, ‘Mac OS X Puma’ => ‘(Mac OS X 10.1)’, ‘Mac OS X Jaguar’ => ‘(Mac OS X 10.2)’, ‘Mac OS X Panther’ => ‘(Mac OS X 10.3)’, ‘Mac OS X Tiger’ => ‘(Mac OS X 10.4)’, ‘Mac OS X Leopard’ => ‘(Mac OS X 10.5)’, ‘Mac OS X Snow Leopard’ => ‘(Mac OS X 10.6)’, ‘Mac OS X Lion’ => ‘(Mac OS X 10.7)’, ‘Mac OS X’ => ‘(Mac OS X)’, ‘Mac OS’ => ‘(Mac_PowerPC)|(PowerPC)|(Macintosh)’, ‘Open BSD’ => ‘(OpenBSD)’, ‘SunOS’ => ‘(SunOS)’, ‘Solaris 11’ => ‘(Solaris/11)|(Solaris11)’, ‘Solaris 10’ => ‘((Solaris/10)|(Solaris10))’, ‘Solaris 9’ => ‘((Solaris/9)|(Solaris9))’, ‘CentOS’ => ‘(CentOS)’, ‘QNX’ => ‘(QNX)’, // Kernels ‘UNIX’ => ‘(UNIX)’, // Linux Operating Systems ‘Ubuntu 12.10’ => ‘(Ubuntu/12.10)|(Ubuntu 12.10)’, ‘Ubuntu 12.04 LTS’ => ‘(Ubuntu/12.04)|(Ubuntu 12.04)’, ‘Ubuntu 11.10’ => ‘(Ubuntu/11.10)|(Ubuntu 11.10)’, ‘Ubuntu 11.04’ => ‘(Ubuntu/11.04)|(Ubuntu 11.04)’, ‘Ubuntu 10.10’ => ‘(Ubuntu/10.10)|(Ubuntu 10.10)’, ‘Ubuntu 10.04 LTS’ => ‘(Ubuntu/10.04)|(Ubuntu 10.04)’, ‘Ubuntu 9.10’ => ‘(Ubuntu/9.10)|(Ubuntu 9.10)’, ‘Ubuntu 9.04’ => ‘(Ubuntu/9.04)|(Ubuntu 9.04)’, ‘Ubuntu 8.10’ => ‘(Ubuntu/8.10)|(Ubuntu 8.10)’, ‘Ubuntu 8.04 LTS’ => ‘(Ubuntu/8.04)|(Ubuntu 8.04)’, ‘Ubuntu 6.06 LTS’ => ‘(Ubuntu/6.06)|(Ubuntu 6.06)’, ‘Red Hat Linux’ => ‘(Red Hat)’, ‘Red Hat Enterprise Linux’ => ‘(Red Hat Enterprise)’, ‘Fedora 17’ => ‘(Fedora/17)|(Fedora 17)’, ‘Fedora 16’ => ‘(Fedora/16)|(Fedora 16)’, ‘Fedora 15’ => ‘(Fedora/15)|(Fedora 15)’, ‘Fedora 14’ => ‘(Fedora/14)|(Fedora 14)’, ‘Chromium OS’ => ‘(ChromiumOS)’, ‘Google Chrome OS’ => ‘(ChromeOS)’, // Kernel ‘Linux’ => ‘(Linux)|(X11)’, // BSD Operating Systems ‘OpenBSD’ => ‘(OpenBSD)’, ‘FreeBSD’ => ‘(FreeBSD)’, ‘NetBSD’ => ‘(NetBSD)’, // Mobile Devices ‘Android’ => ‘(Android)’, ‘iPod’ => ‘(iPod)’, ‘iPhone’ => ‘(iPhone)’, ‘iPad’ => ‘(iPad)’, //DEC Operating Systems ‘OS/8’ => ‘(OS/8)|(OS8)’, ‘Older DEC OS’ => ‘(DEC)|(RSTS)|(RSTS/E)’, ‘WPS-8’ => ‘(WPS-8)|(WPS8)’, // BeOS Like Operating Systems ‘BeOS’ => ‘(BeOS)|(BeOS r5)’, ‘BeIA’ => ‘(BeIA)’, // OS/2 Operating Systems ‘OS/2 2.0’ => ‘(OS/220)|(OS/2 2.0)’, ‘OS/2’ => ‘(OS/2)|(OS2)’, // Search engines ‘Search engine or robot’ => ‘(nuhk)|(Googlebot)|(Yammybot)|(Openbot)|(Slurp)|(msnbot)|(Ask Jeeves/Teoma)|(ia_archiver)’ ); foreach($oses as $os=>$pattern) < if(preg_match("/$pattern/i", $userAgent)) < return $os; >> return ‘Unknown’; > ?>

Я, для определения windows у пользователя или нет, просто оставил в массиве Mircrosoft Windows Operating Systems и заменил return на true если ОС пользователя совпадает элементом массива oses, и return false — в противном случае.

function getOS($userAgent) < $oses = array ( '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’ ); foreach($oses as $os=>$pattern) < if(preg_match("/$pattern/i", $userAgent)) < return true; >> return false; > if (getOS($_SERVER[‘HTTP_USER_AGENT’])==true)< echo "У вас windows"; >else < echo "У вас не windows"; >?>

Топ-пост этого месяца:  Менюмейк — сервис для создания красивого меню для вашей группы или паблика Вконтакте

Определяем устройство с помощью PHP

Однажды этот прекрасный день пришёл. День, когда я физически осознал, что мне нужно определять, каким устройством пользуется посетитель сайта, чтобы соответственно отрисовывать для него страницу.

Прошлая методика с помощью медиазапросов по ширине экрана в моих глазах себя изжила — в таком случае на страницу всё равно загружается все элементы, только часть из скрывается или модернизируется. С одной стороны — это правильный и надёжный подход. С другой стороны, когда у нас присутствуют тяжёлые медиафайлы (например, видеофон) или немного другое расположение элементов, то будет намного проще и лучше грузить только нужные элементы в зависимости от того, каким устройством пользуется посетитель сайта.

Итак, я пошёл в интернет за готовым ответом, поскольку издавна исповедую практику «Сначала попробовать чужие костыли готовые решения, а если не нашёл — писать самостоятельно». Собственно, что я нашёл в интернете — это использовать $_SERVER[«HTTP_USER_AGENT»] или вообще пользоваться JavaScript’ом.

Затем, на одном форуме нашёл таки описание интересного и простого php-скрипта, которым уже достаточно давно пользуюсь и хочу поделиться с вами. Называется он Mobile-Detect (ссылка на GitHub). Это очень легковесное и удобное решение, которое использует ту самую строчку HTTP_USER_AGENT в комплекте с определёнными заголовками.

Проект постоянно поддерживается и обновляется, ибо весьма полезная вещь.

Подключается скрипт очень просто — с помощью requred_once мы указываем путь к файлу, а затем инициализируем объект:

Настройка скрипта завершена. Теперь через использование $detect мы можем определять устройства. Нам доступны следующие переменные для определения типа устройств:

  • isMobile — переменная, которая определяет любое мобильное устройство — как смартфон, так и планшет;
  • isTablet — переменная, которая предназначена для определения только планшетных компьютеров.

Также существуют две переменные для определения операционной системы мобильного устройства:

  • isiOS — определяет устройства под управлением iOs (iPhone и iPad);
  • isAndroidOS — устройства на Android;
  • isWindowsMobileOS и isWindowsPhoneOS — тут можно не просто узнать, что эта мобильная система производства Microsoft, но даже указать его версии. WindowsMobile уже не столь актуальна, поскольку мелкомягкие перешли на единую платформу, но если вдруг к нам зайдут пользователи Pocket PC и Smartphone, то мы модем предложить для них уникальный сервис;
  • isBlackBerryOS — можно определить также смартфоны этого производителя. Для России аппараты BlackBerry не слишком актуальны, но возможно всё (вдруг вы или ваш заказчик — фанат или пользователь этого девайса, и нужно сделать что-то особенное для других пользователей);
  • isPalmOS и isSymbianOS — для устройств на таких операционных системах есть переменные для определения. Для меня это очень редкие устройства — настолько, что в жизни таких не видел (но это не точно), только на сайты заходят редкие пользователи этих устройств.


Кроме того, скрипт может определять производителя устройства. Укажу всего несколько переменных для определения вендора устройства, которые нам доступны:

  • isiPhone и isiPad — можно чётко определить для каждого из устройств Apple, что показывать его пользователю;
  • isSamsung — для устройств производства Samsung, один из самых популярных производителей;
  • isLG — телефоны производства LG также весьма популярны и для них можно сделать что-то особое;
  • isVertu — посетитель вашего сайта обладатель телефона Vertu, нужно больше золота (и умножаем все цены в магазине на 10).

В реальности этих переменных намного больше — на демо-странице скрипта можно увидеть список поддерживаемых переменных.

Для тех, кто хочет убойной точности и избирательности, можно указывать нужные устройства через значения UserAgent, но по мне такая избирательность уж слишком чрезмерная (хотя бывает всякое).

Разработчики не перестают совершенствовать свой продукт и вполне вероятно, что скоро нам будет доступна возможность определения версий браузеров и устройств (в первую очередь для продукции Apple) — функции уже есть в последнем релизе, но пока они находятся на бета-тестировании.

Теперь давайте разберём на примере принцип работы скрипта. Допустим, мы должны выводить для посетителя сайта разные сообщения в зависимости от операционной системы его устройства. Это будет выглядеть так:

Этот пример немного бесполезный, но очень простой. Немного подумав, этот скрипт можно исползовать для более изящных решений, например, в зависимости от операционной системы подключать разные стили и изображения, чтобы дизайн сайта адаптировался под устройство. Либо, если на вашей странице есть реклама мобильного приложения, выводил предложения о переходе на AppStore или Google Play соответственно. Идей для применения может быть много.

Предлагаю вашему вниманию ещё один пример, который используется на моём сайте. Суть кода следующая — мы выводим разные варианты шапки сайта в зависимости от типа устройства. Код (с сокращениями) следующий:

И напоследок самое сладкое — эта библиотека была портирована на JavaScript, Varnish Cache и LUA.

На основе этого скрипта написаны плагины и модули для WordPress, Drupal, Joomla, Magento, PrestaShop (там он вообще поставляется в стандартном пакете с версии 1.5), Laravel, Yii Framework и множество других фреймворков и языков и платформ.

Библиотека очень полезная и весьма доставляющая.

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

Подскажите пожалуйста верное определение устройства( желательно разделения по OS — IOS,Android и т.п )

и браузера — даже определения YaBrowser

Желательно php, но на сколько я знаю адекватно определить на данный момент нельзя, getbrowser — определяет неверно..

Можно JS библиотеку, подскажите пожалуйста

  • Вопрос задан более трёх лет назад
  • 2883 просмотра

Содержимое заголовка User-Agent: из текущего запроса, если он есть. Эта строка содержит обозначение браузера, которым пользователь запросил данную страницу. Типичным примером является строка: Mozilla/4.5 [en] (X11; U; Linux 2.2.9 i586). Среди прочего, вы можете использовать это значение с функцией get_browser() чтобы адаптировать вывод вашей страницы к возможностям браузера пользователя

Все они насколько я знаю работают с заголовком USER_AGENT, на js можно еще размер экрана, и другие факторы, не доступные для сервер сайда принимать во внимание

А не подскажете как там определить браузер , ОС, и мобильное устройство — 3 командами, например
whatBrowser() — YaBrowser
whatOS() — Windows
isMobile() — false

а не перечислять все функции?

+ не может определить Yandex Browser

даже через ->is(‘YaBrowser’);

Подключайте Modernizr.js а далее Detectizr.js, это даст вам полный контроль над пользователями и вы будете точно знать
1. какие технологии вам доступны
2. какой браузер использует пользователь
3. с какого устройства подключен
4. какую версию браузера и движка использует

Связка беспроигрышная. НО — весит существенно, придется использовать gzip и кешировать js

Cookies, сессии и другие способы идентификации пользователя

Несмотря на то, что всё нижеописанное по большому счёту применимо к вебу в целом, я буду рассказывать обо всём с точки зрения PHP-программиста, чтобы было понятнее.

Как можно с точки зрения стандартных средств веба однозначно определить пользователя?


Давайте начнём с того, что однозначное определение человека как индивида возможно только с помощью логина/пароля, которые знает только он и использует их для входа в систему. И то это не 100% гарантия, поскольку авторизационная информация может быть украдена и использована злоумышленником.

Но с этим всё ясно. Давайте рассмотрим случай, когда регистрация/вход не предусматривается. Например, если мы хотим, чтобы пользователи голосовали за какое-нибудь фото и не могли накручивать голоса, или кликали на баннеры и не накручивали клики и т.д.

Если проанализировать всю информацию, которая может быть передана от клиентской стороны на сервер и использована для идентификации пользователей, то можно выделить следующие вещи:

  • Cookies — «куки» (массив $_COOKIE в PHP) — это небольшие куски информации, которые хранятся в браузере на стороне пользователя и передаются в каждом запросе. Куки доступны из Javascript (исключение составляют куки, имеющие свойство HttpOnly). Кука привязана к учётной записи пользователя в конкретном браузере на конкретном компьютере и будет храниться всё время, пока не будет изменена/удалена или не истечёт срок её действия.
  • IP-адрес (переменная $_SERVER[‘REMOTE_ADDR’]) — это физический адрес клиентского компьютера в сети интернет. Бывает статическим и динамическим. В отличие от куки, IP-адрес не привязан к учётной записи пользователя или к браузеру, а только к конкретному компьютеру. Но он также не может являться однозначным идентификатором компьютера, так как может быть изменён в любой момент. В частности, если провайдер клиента не предоставляет статического адреса, то адрес меняется при каждом подключении к интернету, а также может автоматически меняться раз в несколько дней.
  • Юзер-агент ($_SERVER[‘HTTP_USER_AGENT’]) — строка текста, которая передаётся в заголовках запросов и идентифицирует тип используемого браузера. Вряд ли может быть использована для идентификации пользователя, поскольку будет изменяться при обновлении версии браузера и при использовании пользователем другого браузера.
Топ-пост этого месяца:  Как установить плагин WordPress из административной панели сайта

Теперь приведу список вещей, которые НЕ передаются с клиента на сервер.

  • MAC-адрес — это число, которое однозначно идентифицирует сетевую карту или модем, используемую для выхода в интернет. Проблема в том, что этот адрес не передаётся через концентраторы и маршрутизаторы. Поэтому может быть использован только в локальной сети, но, увы, не в интернете.
  • Сессия (в PHP это массив $_SESSION) — вопреки уверенному (но ошибочному) мнению начинающих программистов на PHP, этот массив ни в каком виде не передаётся ни на клиентскую сторону, ни с клиентской стороны, и тем более не может быть там сохранён. Сессия — принадлежность сервера, а точнее, некоторый кусок информации, хранящейся на сервере, идентифицируемый числом — номером сессии (session_id), который на самом деле как правило хранится в куке.

Как Вы видите, в вебе просто не существует адекватного надёжного способа идентификации пользователя или компьютера. Поэтому в случаях, когда регистрация пользователя невозможна или не желательна по логике приложения, для исключения возможности накрутки, а точнее, максимального её усложнения, используют различные хитрости и комбинированные методы.

PHP веб, концепции работы: идентификация и перенаправление браузера, определение операционной системы и другие функции

Здесь вы можете скачать различные скрипты с подробными инструкциями по их установке и использованию.

Плагин для создания круговых обзорных изображений с управлением курсором

ThreeSixty — плагин jQuery для создания из серии изображений кругового обзорного представления, которое управляется с помощью мыши или курсора.

Набор стилей для чекбоксов

9 наборов правил для оформления чекбоксов на страницах и формах веб проекта.

Выскальзывающие счетчики категорий

Набор правил CSS для формирования выскальзывающих ярлыков с количеством записей в категории или метке.

Круглый элемент управления на CSS

Набор правил и разметка для организации оригинального элемента управления для веб проекта.

CSS код индикатора загрузки

Интересный индикатор загрузки, сделанный без использования изображений и JavaScript.

Кнопочное меню на чистом CSS

Оригинальное кнопочное меню выполненное без использования изображений.

Выпадающее меню с 3D эффектом

Код выпадающего меню с интересным 3D эффектом при раскрытии пункта.

Определение версии ОС и браузера

Здравствуйте! Подскажите, пожалуйста, необходимо определить версию ОС и браузера с которого пользователь входит в личный кабинет. Как мне сказали, чтобы правильно определяло, необходимо PHP-расширение browscap, верно? А раз его нет, то работает только этот код (см. ниже). И то не правильно, сижу с Opera — определяет как Google Chrome, ОС определяет просто как Windows, без версии (7, 8 или 10)

09.05.2020, 13:48

Определение версии браузера через php
Всем доброго времени суток! Нужна помощь. Я хочу сделать проверку версии браузера, но не могу.

Определение версии Windows
Есть переменная. Которая содержит нечто вроде Есть негодный код, с помощью которого можно.

Определение браузера
1. Я определяю браузер на пшп, для создания собственных префиксов к классам, как определить все.

Получить информацию о операционной системе

Недавно я начал задаваться вопросом о таких сайтах, как http://thismachine.info/, которые получают информацию об операционной системе пользователя. Я не смог узнать, как это сделать с PHP, и хотел попытаться понять это.


Я заметил, что они перечисляют user-agent , который дает много информации о браузере. Получают ли они информацию о операционной системе, или что-то еще? Есть ли API, который я мог бы использовать для получения пользовательской операционной системы?

Я вижу, как они получили браузер и IP, но не смогли выяснить часть операционной системы!

Приведенный ниже код сам по себе может объяснить, как http://thismachine.info/ может показать, какую операционную систему кто-то использует.

Что он делает, так это то, что он нюхает вашу основную модель операционной системы, например, windows nt 5.1 как мою собственную.

Затем он передает Windows NT 5.1/I в Windows XP в качестве операционной системы.

Использование: ‘/windows nt 5.1/i’ => ‘Windows XP’, из массива.

Вы могли бы сказать, догадки или приближение, но тем не менее в значительной степени ударить.

Сноски: (янв 19/14) Был предложил изменить на 18 января 2014 года, чтобы добавить /msie|trident/i по YJSoft нового члена на SO.

Комментарий читается как:

Комментарий: потому что msie11 ua не включает msie (вместо этого он включает трезубец)

Я немного исследовал это и нашел несколько ссылок, объясняющих строку трезубца.

Что касается вопроса об обнаружении SUSE, найдите этот фрагмент кода по следующему URL:

Изменение: 12 апреля 2015 г.

Вчера я заметил вопрос, который может иметь отношение к этим вопросам и может быть полезным для некоторых. В отношении:

Mozilla/5.0 (Linux; Android 4.4.2; SAMSUNG-GT-I9505 Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.96 Mobile Safari/537.36

Еще одно редактирование и добавление ссылочной ссылки, которая была задана (и получена ответ/принята сегодня, 4/16 ноября), которая может быть полезной.

Консультируйтесь с Q & A здесь на Стеке:

Когда вы переходите на сайт, ваш браузер отправляет запрос на веб-сервер, включая много информации. Эта информация может выглядеть примерно так:

Все эти данные используются веб-сервером для определения способа обработки запроса; предпочтительный язык и разрешено ли сжатие.

В PHP вся эта информация сохраняется в массиве $_SERVER . Чтобы узнать, что вы отправляете на веб-сервер, создайте новый PHP файл и распечатайте все из массива.

Это даст вам хорошее представление обо всем, что отправляется на сервер, откуда вы можете извлечь нужную информацию, например. $_SERVER[‘HTTP_USER_AGENT’] , чтобы получить операционную систему и браузер.

Взял следующий код из руководства php для get_browser.

В массив $browser включена информация о platform которая дает вам конкретную используемую операционную систему.

Пожалуйста, не забудьте увидеть раздел «Примечания» на этой странице. Это может быть что-то (thismachine.info) использует, если не что-то уже указано в других ответах.

Если вы хотите получить всю эту информацию, вы можете прочитать следующее:
http://php.net/manual/en/function.get-browser.php

Вы можете запустить образец кода, и вы увидите, как он работает:

В приведенном выше примере будет выведено нечто похожее на:

В соответствии с ответом Fred-II я хотел поделиться своим делом с функцией getOS, он избегает глобальных привязок, объединяет оба списка и обнаруживает архитектуру (x32/x64)

Если вы хотите получить очень мало информации, например, о классе в html для обычных браузеров, вы можете использовать:

который вернет «сафари» или «firefox» или «chrome», или «ie ie8», т.е. ie9 ‘, т.е. ie10’, ‘ie ie11’.

Вы можете найти эту информацию в $_SERVER[‘HTTP_USER_AGENT’] , но ее формат является бесплатным, не гарантируется, что его можно отправить, и его легко изменить пользователем, будь то конфиденциальность или другие причины.

Топ-пост этого месяца:  Пользовательские элементы стилизация CSS-in-JS, используемые библиотеки

Если вы не установили директиву browsecap , это вернет предупреждение. Чтобы убедиться, что он установлен, вы можете получить значение с помощью ini_get и посмотреть, установлено ли оно.

Как пояснил kba в своем ответе, ваш браузер отправляет много информации на сервер при загрузке веб-страницы. Большинство веб-сайтов используют данные User-agent для определения гостевой операционной системы, браузера и различной информации.


Определяем устройство с помощью PHP

Однажды этот прекрасный день пришёл. День, когда я физически осознал, что мне нужно определять, каким устройством пользуется посетитель сайта, чтобы соответственно отрисовывать для него страницу.

Прошлая методика с помощью медиазапросов по ширине экрана в моих глазах себя изжила — в таком случае на страницу всё равно загружается все элементы, только часть из скрывается или модернизируется. С одной стороны — это правильный и надёжный подход. С другой стороны, когда у нас присутствуют тяжёлые медиафайлы (например, видеофон) или немного другое расположение элементов, то будет намного проще и лучше грузить только нужные элементы в зависимости от того, каким устройством пользуется посетитель сайта.

Итак, я пошёл в интернет за готовым ответом, поскольку издавна исповедую практику «Сначала попробовать чужие костыли готовые решения, а если не нашёл — писать самостоятельно». Собственно, что я нашёл в интернете — это использовать $_SERVER[«HTTP_USER_AGENT»] или вообще пользоваться JavaScript’ом.

Затем, на одном форуме нашёл таки описание интересного и простого php-скрипта, которым уже достаточно давно пользуюсь и хочу поделиться с вами. Называется он Mobile-Detect (ссылка на GitHub). Это очень легковесное и удобное решение, которое использует ту самую строчку HTTP_USER_AGENT в комплекте с определёнными заголовками.

Проект постоянно поддерживается и обновляется, ибо весьма полезная вещь.

Подключается скрипт очень просто — с помощью requred_once мы указываем путь к файлу, а затем инициализируем объект:

Настройка скрипта завершена. Теперь через использование $detect мы можем определять устройства. Нам доступны следующие переменные для определения типа устройств:

  • isMobile — переменная, которая определяет любое мобильное устройство — как смартфон, так и планшет;
  • isTablet — переменная, которая предназначена для определения только планшетных компьютеров.

Также существуют две переменные для определения операционной системы мобильного устройства:

  • isiOS — определяет устройства под управлением iOs (iPhone и iPad);
  • isAndroidOS — устройства на Android;
  • isWindowsMobileOS и isWindowsPhoneOS — тут можно не просто узнать, что эта мобильная система производства Microsoft, но даже указать его версии. WindowsMobile уже не столь актуальна, поскольку мелкомягкие перешли на единую платформу, но если вдруг к нам зайдут пользователи Pocket PC и Smartphone, то мы модем предложить для них уникальный сервис;
  • isBlackBerryOS — можно определить также смартфоны этого производителя. Для России аппараты BlackBerry не слишком актуальны, но возможно всё (вдруг вы или ваш заказчик — фанат или пользователь этого девайса, и нужно сделать что-то особенное для других пользователей);
  • isPalmOS и isSymbianOS — для устройств на таких операционных системах есть переменные для определения. Для меня это очень редкие устройства — настолько, что в жизни таких не видел (но это не точно), только на сайты заходят редкие пользователи этих устройств.

Кроме того, скрипт может определять производителя устройства. Укажу всего несколько переменных для определения вендора устройства, которые нам доступны:

  • isiPhone и isiPad — можно чётко определить для каждого из устройств Apple, что показывать его пользователю;
  • isSamsung — для устройств производства Samsung, один из самых популярных производителей;
  • isLG — телефоны производства LG также весьма популярны и для них можно сделать что-то особое;
  • isVertu — посетитель вашего сайта обладатель телефона Vertu, нужно больше золота (и умножаем все цены в магазине на 10).

В реальности этих переменных намного больше — на демо-странице скрипта можно увидеть список поддерживаемых переменных.

Для тех, кто хочет убойной точности и избирательности, можно указывать нужные устройства через значения UserAgent, но по мне такая избирательность уж слишком чрезмерная (хотя бывает всякое).

Разработчики не перестают совершенствовать свой продукт и вполне вероятно, что скоро нам будет доступна возможность определения версий браузеров и устройств (в первую очередь для продукции Apple) — функции уже есть в последнем релизе, но пока они находятся на бета-тестировании.

Теперь давайте разберём на примере принцип работы скрипта. Допустим, мы должны выводить для посетителя сайта разные сообщения в зависимости от операционной системы его устройства. Это будет выглядеть так:

Этот пример немного бесполезный, но очень простой. Немного подумав, этот скрипт можно исползовать для более изящных решений, например, в зависимости от операционной системы подключать разные стили и изображения, чтобы дизайн сайта адаптировался под устройство. Либо, если на вашей странице есть реклама мобильного приложения, выводил предложения о переходе на AppStore или Google Play соответственно. Идей для применения может быть много.

Предлагаю вашему вниманию ещё один пример, который используется на моём сайте. Суть кода следующая — мы выводим разные варианты шапки сайта в зависимости от типа устройства. Код (с сокращениями) следующий:

И напоследок самое сладкое — эта библиотека была портирована на JavaScript, Varnish Cache и LUA.

На основе этого скрипта написаны плагины и модули для WordPress, Drupal, Joomla, Magento, PrestaShop (там он вообще поставляется в стандартном пакете с версии 1.5), Laravel, Yii Framework и множество других фреймворков и языков и платформ.

Библиотека очень полезная и весьма доставляющая.

Переменные окружения в PHP или как узнать всё о посетителе сайта и сервере

Какие данные можно получить о посетителе сайта при помощи php (браузер, ip, url и другое) или сервере (имя, почта и другое)?

Как расшифровываются переменные окружения в PHP (SERVER, REDIRECT и др) и что они передают?

DOCUMENT_ROOT Путь к корневой папке сайта. Для локального веб-сервера значение может принимать вид z:/home/htmlbook.ru/www, а в других случаях зависит от операционной системы сервера и используемого программного обеспечения.
GATEWAY_INTERFACE Версия CGI (Common Gateway Interface, общий шлюзовый интерфейс). Значение обычно равно CGI/1.1.
HTTP_ACCEPT Типы файлов, которые способен принять браузер. В качестве значения возвращается список поддерживаемых MIME-типов разделенных между собой запятой, например: text/html, application/xhtml+xml.
HTTP_CONNECTION Тип соединения браузера с веб-сервером. Так, значение keep-alive означает, что браузер поддерживает постоянное соединение с сервером. При этом в течение одного сеанса соединения разрешено делать несколько запросов. Повторного соединения в таком случае уже не происходит.
HTTP_HOST Доменное имя сайта. Обычно различают имена с префиксом www (www.tradebenefit.ru) и без него (tradebenefit.ru). Переменная вернёт тот адрес сайта, который указан в адресной строке браузера.
HTTP_REFERER Адрес страницы, с которой пользователь перешел на данный сайт, он еще называется реферер.
HTTP_USER_AGENT
Идентификатор используемого браузера и операционной системы. В качестве значения возвращается строка, содержащая ключевые слова. Например, следующая строка

Mozilla/5.0 (Windows NT 6.1; WOW64; rv:6.0.2) Gecko/20100101 Firefox/6.0.2

говорит, что пользователь использует браузер Firefox 6.0.2 под операционной системой Windows 7.

QUERY_STRING Запрос, который указан в адресной строке после вопросительного знака (?). Обычно пишется в форме «переменная=значение», где переменные разделяются между собой амперсантом. Рассмотрим пример.

REMOTE_ADDR IP-адрес посетителя сайта.
REQUEST_METHOD Метод отправки данных на сервер. По умолчанию применяется метод GET.
REQUEST_URI Адрес запрашиваемого документа. Отсчёт ведётся от корня сайта, т.е. для полного адреса http://tradebemnefit.ru/1.html вернется значение 1.html.
SERVER_ADDR IP-адрес компьютера, на котором размещается сайт.
SERVER_ADMIN Адрес электронной почты администратора сайта.
SERVER_NAME Имя сервера.
SERVER_PORT Порт, по которому ожидается получение данных.
SERVER_PROTOCOL Протокол для получения и отправки данных. Значение обычно равно HTTP/1.1.
SERVER_SOFTWARE Программное обеспечение установленное на сервере. Для веб-сервера Apache возвращается номер версии (Apache/2.2.4), а также версия PHP (PHP/5.3.3).

Пример вывода переменной окружения в php

Вывод одной переменной делается так:

А для вывода всех данных создаём цикл:

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