User Agent — это строка, которая характеризует программу, делающую запрос к веб-серверу. Пример такой строки:
Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36
Как можно увидеть, по User Agent можно определить операционную систему и версию веб-браузера.
По своей сути User Agent является одним из заголовков протокола HTTP. Причём этот заголовок присылает сам клиент. Отсюда очень важное следствие — строка User Agent может быть подменена на абсолютно любое значение или отсутствовать вовсе. В веб-браузерах это можно сделать с помощью плагинов.
Поэтому всегда помните о том, что Пользовательский Агент может быть спуфлен (заменён). Причём если вы, например, сохраняете полученные значения в базу данных, то помните о необходимости фильтрации данных, поскольку без должной фильтрации пользовательских данных это может стать причиной уязвимости SQL-инъекция.
Итак, получить значение User Agent в PHP скрипте можно используя переменную $_SERVER[‘HTTP_USER_AGENT’]. Например:
<?php echo $_SERVER['HTTP_USER_AGENT'];
Как настроить PHP для работы с get_browser
Ещё один способ — это использовать функцию get_browser. На самом деле, суть функции get_browser в том, чтобы показать возможности (поддерживаемые технологии) веб-браузера на основе User Agent. Причём необязательно для текущего пользователя — функция get_browser может в качество ввода принимать произвольную строку User Agent.
По умолчанию функция get_browser НЕ работает, поскольку требует дополнительной настройки в конфигурации PHP. Если не выполнить эту настройку, то при попытке использовать функцию get_browser вы будете получать примерно такое предупреждение:
Warning: get_browser(): browscap ini directive not set in /srv/http/tests.php on line 5
Точнее говоря, требуется скачать специальный файл с перечнем свойств веб-браузера и указать путь до него в php.ini (главном конфигурационном файле PHP).
Эти файлы размещены на сайте http://browscap.org/. Всего для PHP имеется 3 варианта:
- php_browscap.ini (17,095 KB). Стандартная версия файла, довольно полная.
- full_php_browscap.ini (85,513 KB). Самая большая версия файла со всеми возможными свойствами.
- lite_php_browscap.ini (463 KB). Облегчённый вариант, содержит основные браузеры и поисковые движки. Этот файл вполне подойдёт для большинства веб-сайтов.
Итак, скачайте один из этих файлов — тот, который больше подходит под ваши нужды.
Для примера я скачал файл full_php_browscap.ini. Переименуйте скаченный файл в browscap.ini.
Переместите этот файл в директорию /etc/php/
Теперь откройте файл /etc/php/php.ini. Найдите там раздел:
[browscap] ; http://php.net/browscap ;browscap = extra/browscap.ini
Удалите вторую строку, а третью раскомментируйте и в качестве значения укажите абсолютный путь до файла, чтобы получилось так:
[browscap] browscap = /etc/php/browscap.ini
ПРИМЕЧАНИЕ: В некоторых дистрибутивах путь до файла php.ini иной и зависит от версии PHP. К примеру, сейчас в Debian путь до файла следующий: /etc/php/8.1/apache2/php.ini
Чтобы изменения вступили в силу, перезапустите веб-сервер Apache.
На Debain, Ubuntu, Linux Mint, Kali Linux и их производных:
sudo systemctl restart apache2.service
На Arch Linux, BlackArch и их производных:
sudo systemctl restart httpd.service
Пример выполнения кода:
<?php $browser = get_browser(null, true); print_r($browser);
Полученный вывод:
Array ( [browser_name_regex] => ~^mozilla/5\.0 \(.*linux.*x86_64.*\).*applewebkit.*\(.*khtml.*like.*gecko.*\).*chrome/.* safari/.*$~ [browser_name_pattern] => Mozilla/5.0 (*Linux*x86_64*)*applewebkit*(*khtml*like*gecko*)*Chrome/* Safari/* [parent] => Chrome Generic [browser_bits] => 64 [platform] => Linux [platform_description] => Linux [platform_bits] => 64 [platform_maker] => Linux Foundation [device_name] => Linux Desktop [device_code_name] => Linux Desktop [comment] => Chrome Generic [browser] => Chrome [browser_type] => Browser [browser_maker] => Google Inc [frames] => 1 [iframes] => 1 [tables] => 1 [cookies] => 1 [javascript] => 1 [cssversion] => 3 [aolversion] => 0 [device_type] => Desktop [device_pointing_method] => mouse [renderingengine_name] => Blink [renderingengine_description] => a WebKit Fork by Google [renderingengine_maker] => Google Inc [browser_modus] => unknown [version] => 0.0 [majorver] => 0 [minorver] => 0 [platform_version] => unknown [alpha] => [beta] => [win16] => [win32] => [win64] => [backgroundsounds] => [vbscript] => [javaapplets] => [activexcontrols] => [ismobiledevice] => [istablet] => [issyndicationreader] => [crawler] => [isfake] => [isanonymized] => [ismodified] => [device_maker] => unknown [device_brand_name] => unknown [renderingengine_version] => unknown )
Обратите внимание, что в последних версиях PHP драмматически (в сотню раз) увеличена скорость работы функции get_browser.
При выборе нужного файла browscap.ini помните об их размерах, поскольку облегчённая версия от самой полной по размеру отличается примерно в 200 раз! При этом помните о расходе оперативной памяти на каждый процесс веб-сервера. Причём может быть повышенной потребление оперативной памяти даже если вы фактически не используете функцию get_browser.
Также помните о том, что вам нужно заботиться об обновлении файла browscap.ini.
Связанные статьи:
- PHP cURL как установить значение User Agent ИЛИ как сделать так, чтобы сервера не блокировали запросы cURL? (82.5%)
- Как в PHP 8 показать все ошибки (61.9%)
- Ошибка «No such file or directory: AH02454: FCGI: attempt to connect to Unix domain socket /run/php/php8.1-fpm.sock (*:80) failed» (РЕШЕНО) (56.7%)
- Как увеличить память и время для PHP скриптов (55.2%)
- Почему не работает код в <? и ?>. Как включить поддержку сокращённых тегов в PHP. Что означает <?= (55.2%)
- Ошибка «Failed - Network error» во время экспорта в phpMyAdmin (РЕШЕНО) (RANDOM - 10.9%)