get_browser()
Функция get_browser() в PHP получает информацию о браузере пользователя на основе заголовка HTTP User-Agent.
Функция PHP get_browser()
Функция get_browser() в PHP используется для получения информации о браузере пользователя, которая определяется на основе HTTP-заголовка User-Agent, отправляемого браузером клиента на сервер.
Синтаксис
get_browser(?string $user_agent = null, bool $return_array = false): object|array|falseФункция get_browser() принимает два необязательных параметра:
$user_agent: string, задающий User-Agent для разбора. Если параметр опущен (или равенnull), функция использует User-Agent текущего запроса из$_SERVER['HTTP_USER_AGENT'].$return_array: boolean. Если равенtrue, функция возвращает ассоциативный array свойств браузера. Если равенfalse(по умолчанию), возвращается object с теми же данными в виде свойств.
Возвращаемое значение: object или array возможностей браузера, либо false при ошибке.
Предварительное условие: browscap.ini
get_browser() самостоятельно ничего не определяет — она ищет User-Agent в базе данных возможностей браузера под названием browscap.ini. Необходимо скачать этот файл и указать на него в php.ini с помощью директивы browscap:
; in php.ini
browscap = /path/to/browscap.iniБез этой директивы функция возвращает false и выдаёт предупреждение. Поскольку таблица поиска велика и требует разбора, вызов get_browser() создаёт заметные накладные расходы — именно поэтому современные приложения стараются её избегать.
Возврат array
Передайте true в качестве второго аргумента, чтобы получить ассоциативный array. Это наиболее удобная форма для перебора или просмотра с помощью print_r():
<?php
$browser = get_browser(null, true);
print_r($browser);
?>Типичный (сокращённый) результат для запроса из Chrome на рабочем столе выглядит так:
Array
(
[browser_name_pattern] => *mozilla/5.0 (*windows nt 10.0*) applewebkit*chrome*
[parent] => Chrome 120.0
[platform] => Win10
[browser] => Chrome
[version] => 120.0
[majorver] => 120
[minorver] => 0
[cookies] => 1
[javascript] => 1
[frames] => 1
...
)Распространённые ключи включают browser, version, majorver, minorver, platform, parent, cookies, javascript, frames, iframes, tables и регулярное выражение для сопоставления browser_name_pattern. Булевы возможности возвращаются в виде строк "1" (true) или "0"/пустая строка (false).
Возврат object (по умолчанию)
Если второй аргумент опущен, возвращается object, и возможности читаются как свойства:
<?php
$browser = get_browser();
echo "Browser: {$browser->browser}\n";
echo "Version: {$browser->version}\n";
echo "Platform: {$browser->platform}\n";
?>Формирование читаемого сообщения
<?php
$browser = get_browser(null, true);
echo "You are using " . $browser['browser']
. " version " . $browser['version']
. " on " . $browser['platform'] . ".";
?>Результат будет выглядеть примерно как You are using Chrome version 120.0 on Win10., основываясь на заголовке User-Agent HTTP-ответа запроса.
Разбор конкретного User-Agent
Необязательно опираться на текущий запрос — можно передать любую строку User-Agent самостоятельно, что удобно для тестирования или анализа логов:
<?php
$ua = "Mozilla/5.0 (iPhone; CPU iPhone OS 17_0 like Mac OS X) AppleWebKit/605.1.15";
$browser = get_browser($ua, true);
echo $browser['platform']; // e.g. iOS
?>Защита от сбоя
Поскольку функция возвращает false, если browscap не настроен, всегда проверяйте результат перед чтением свойств:
<?php
$browser = get_browser(null, true);
if ($browser === false) {
// Fall back to the raw header
echo $_SERVER['HTTP_USER_AGENT'] ?? 'Unknown browser';
} else {
echo $browser['browser'] . ' ' . $browser['version'];
}
?>Заключение
Функция get_browser() — полезный инструмент для получения информации о браузере пользователя в PHP, который можно применять для оптимизации пользовательского опыта или в целях отладки. Важно учитывать, что функция зависит от заголовка User-Agent, отправляемого браузером, который может быть изменён пользователем или злоумышленником. Поэтому информацию, возвращаемую функцией, следует считать потенциально ненадёжной и не использовать в целях безопасности. Кроме того, из-за накладных расходов на производительность и необходимости внешнего файла browscap.ini современные приложения нередко предпочитают разбирать заголовок User-Agent напрямую или использовать специализированные библиотеки.
Связанные функции
- Суперглобальные переменные PHP —
$_SERVER,$_GET,$_POSTи другие встроенные массивы. $_SERVER— прямое чтение сырого заголовкаHTTP_USER_AGENT.preg_match()— создание собственного разбора User-Agent с помощью регулярных выражений.