Get browser: примеры (PHP)

Использование get_browser для определения браузера
Раздел: Сетевые функции
get_browser(?string $user_agent = null, bool $return_array = false): object|array|false
Описание функции get_browser

Функция get_browser() в PHP возвращает информацию о возможностях браузера пользователя на основе анализа строки пользовательского агента. Она используется для адаптации вывода веб-страниц под конкретные браузеры, определения поддержки определенных технологий или создания статистики.

Аргументы функции

Функция принимает два необязательных параметра:

  • user_agent (string|null) - строка пользовательского агента. Если передано null, используется значение из $_SERVER['HTTP_USER_AGENT']. Можно передать конкретную строку для анализа.
  • return_array (bool) - определяет формат возвращаемых данных. При false (по умолчанию) возвращается объект, при true - ассоциативный массив.

Для корректной работы требуется актуальный файл browscap.ini, путь к которому задается в php.ini директивой browscap.

Примеры использования get_browser
Базовый пример
$browser = get_browser();
var_dump($browser);
object(stdClass)#1 (38) {
  ["browser_name_regex"]=> string(99) "~^mozilla/5\.0 \(.*windows nt 10\.0.*\) applewebkit.*\(khtml, like gecko\).*chrome/.*safari/.*$"
  ["browser_name_pattern"]=> string(73) "Mozilla/5.0 (*Windows NT 10.0*) AppleWebKit* (KHTML, like Gecko)*Chrome/*Safari/*"
  ["parent"]=> string(11) "Chrome 110.0"
  ["platform"]=> string(7) "Win10"
  ["browser"]=> string(6) "Chrome"
  ["version"]=> string(6) "110.0"
  ["majorver"]=> string(3) "110"
  ["minorver"]=> string(1) "0"
  ...
}
С возвратом массива
$browser = get_browser(null, true);
echo $browser['browser'] . ' ' . $browser['version'];
Chrome 110.0
С кастомным User-Agent
$ua = 'Mozilla/5.0 (iPhone; CPU iPhone OS 15_0 like Mac OS X) AppleWebKit/605.1.15';
$browser = get_browser($ua);
echo $browser->platform . ' - ' . $browser->browser;
iOS - Safari
Альтернативы в PHP

Прямых аналогов get_browser() в стандартной библиотеке PHP нет. Однако для отдельных задач можно использовать:

getenv() для получения User-Agent

Функция getenv('HTTP_USER_AGENT') возвращает строку пользовательского агента для последующего самостоятельного разбора.

Сторонние библиотеки

Библиотеки вроде mobiledetect/mobiledetectlib предлагают более легковесное определение мобильных устройств без файла browscap.ini. Они предпочтительны при необходимости только определить тип устройства.

Типичные ошибки
Отсутствие файла browscap.ini
// В php.ini не задана директива browscap
$browser = get_browser();
var_dump($browser);
bool(false)
Устаревший файл конфигурации

При использовании старого browscap.ini функция может не распознавать новые браузеры, возвращая некорректные данные или false.

Неверный формат User-Agent
$browser = get_browser('Invalid User Agent String');
var_dump($browser);
object(stdClass)#1 (38) {
  ["browser_name_regex"]=> NULL
  ["browser_name_pattern"]=> NULL
  ["parent"]=> string(13) "Default Browser"
  ...
}
Изменения в PHP 8

В PHP 8.1 параметр return_array стал необязательным и по умолчанию равен false. Ранее требовалось явно передавать false для получения объекта. Также улучшена обработка ошибок при отсутствии файла browscap.ini.

// PHP 8.0 и ранее
$browser = get_browser(null, false);
// PHP 8.1+
$browser = get_browser(); // то же самое
Расширенные примеры
Адаптация контента
Пример php
$browser = get_browser();
if ($browser->browser === 'IE' && $browser->majorver < 11) {
    echo 'Ваш браузер устарел. Рекомендуем обновить.';
} else {
    echo 'Добро пожаловать!';
}
Добро пожаловать!
Проверка поддержки JavaScript
Пример php
$browser = get_browser(null, true);
if ($browser['javascript'] == 1) {
    echo 'Браузер поддерживает JavaScript';
} else {
    echo 'JavaScript не поддерживается';
}
Браузер поддерживает JavaScript
Определение мобильного устройства
Пример php
$browser = get_browser();
$mobileDevices = ['Android', 'iPhone', 'Windows Phone'];
if (in_array($browser->platform, $mobileDevices) || $browser->ismobiledevice == 1) {
    header('Location: /mobile/');
}
Сбор статистики
Пример php
$browser = get_browser(null, true);
$logData = [
    'date' => date('Y-m-d'),
    'browser' => $browser['browser'] . ' ' . $browser['version'],
    'platform' => $browser['platform'],
    'cookies' => $browser['cookies'] ? 'Yes' : 'No'
];
file_put_contents('stats.log', json_encode($logData) . "\n", FILE_APPEND);
Аналоги в других языках
Python (ua-parser)
from ua_parser import user_agent_parser
result = user_agent_parser.Parse(
    'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'
)
print(result['user_agent']['family'], result['user_agent']['major'])
Chrome 110
JavaScript (UAParser.js)
const parser = new UAParser();
const result = parser.getResult();
console.log(result.browser.name, result.browser.version);
Chrome 110.0.0.0
Особенности

Внешние библиотеки обычно не требуют отдельного файла конфигурации, как browscap.ini в PHP. Они чаще обновляются и имеют более узкую специализацию.

PHP get_browser function comments

En
Get browser Tells what the user's browser is capable of