Pull to refresh

Что PHP может узнать о браузере посетителя?

Reading time3 min
Views30K

О чем это?


Возможно ли узнать более детальную информацию о браузере посетителя кроме строки, содержащейся в $_SERVER[«HTTP_USER_AGENT»]: поддерживает ли яву, апплеты, таблицы стилей и фреймы? А может это вообще гуглобот зашел?


Предистория


Захотелось заказчику, чтобы при заходе на сайт отображался его любимый логотип с пробегающей по нему искоркой света… Уговорить отказаться от этой идеи человека я так и не смог, но в итоге мы решили, что радость эта будет отображаться только раз, и только при заходе на главную страницу. Если человек попал на сайт с поисковика, он сразу переходит на страницу. Если он руками вписывает адрес в браузер, он перенаправляется на страницу с анимацией. После успешного отображения в куки пишется маркер, и видео больше не грузится. Но… Если на сайт зайдет не человек, а поисковик, то писать себе куки он не будет. Поэтому он всегда будет натыкаться на страницу с анимацией, и в выдаче поисковиков мы себя так и не увидим. Да и зачем поисковику логотип компании видеть :)

Как можно узнать что-либо о браузере клиента


Проблема в итоге была решена методом поиска подстроки имен пауков нескольких известных поисковиков в переменной $_SERVER[«HTTP_USER_AGENT»]. Но перед этим я походил по ману и обнаружил интересную функцию get_browser(). Она умеет выдавать массив параметров браузера гостя нашего сайта, назначения половины которых, правда, я так и не понял :) Единственная тонкость работы этой функции в том, что она требует наличия на хосте свежей версии файла browscap.ini, а также настройки php.ini. Очевидно что нашим ленивым (просьба не обижаться) админам влом постоянно обновлять этот файлик, так что на это обычно забивают и функция попросту недоступна. Проверить это можно, заглянув в phpinfo(), отыскав там диррективу browscap, и ничуть не удивившись что напротив нее гордо красуется надпись «no value», приступить к прочтению следующего параграфа.

Что же делать


Для начала нам нужен сам файл browscap.ini. Его можно скачать с http://browsers.garykeith.com/. Может он есть и еще где-то, но данный источник рекомендуемый для скачивания самим PHP, по-этому пользуемся именно им.
Возникает вопрос: а куда нам, собственно, теперь его пристроить? Админ нас к серверу не подпустит, да и в настройках ковыряться не даст. По-этому надо бы поискать другой вариант. А их в сети нашлось целых два.

Тут находятся детальные и простые инструкции по запуску. Если вкратце, остается скачать нужную библиотеку, подключить в нужное место, и вызвать соответствующую функцию. Для Browser Capabilities PHP Project вызов выглядит вот так:

if(ini_get('browscap'))
{
//неленивые админы попались

/* старт шутки */
//вероятность выполнение участка кода стремится к нулю поэтому пишем сюда
echo "Начальство - ты меня задрало!";
/* конец шутки - всем смеяться :)*/

$browserInfo=get_browser();

}
else
{
//используем нашу библиотеку
require_once('browscap.php');
$bc = new Browscap('path/to/the/cache/dir');
$browserInfo=$bc->getBrowser();

}


в результате чего получим примерно следующее
stdClass Object
(
[browser_name] => Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_2; en-us) AppleWebKit/525.18 (KHTML, like Gecko) Version/3.1.1 Safari/525.18
[browser_name_regex] => ^mozilla/5\.0 \(macintosh; .; .*mac os x.*\) applewebkit/.* \(.*\) version/3\.1.* safari/.*$
[browser_name_pattern] => Mozilla/5.0 (Macintosh; ?; *Mac OS X*) AppleWebKit/* (*) Version/3.1* Safari/*
[Parent] => Safari 3.1
[Platform] => MacOSX
[Browser] => Safari
[Version] => 3.1
[MajorVer] => 3
[MinorVer] => 1
[Frames] => 1
[IFrames] => 1
[Tables] => 1
[Cookies] => 1
[BackgroundSounds] => 1
[JavaApplets] => 1
[JavaScript] => 1
[CSS] => 2
[CssVersion] => 2
[supportsCSS] => 1
[Alpha] =>
[Beta] =>
[Win16] =>
[Win32] =>
[Win64] =>
[AuthenticodeUpdate] =>
[CDF] =>
[VBScript] =>
[ActiveXControls] =>
[Stripper] =>
[isBanned] =>
[WAP] =>
[isMobileDevice] =>
[isSyndicationReader] =>
[Crawler] =>
[AOL] =>
[aolVersion] => 0
[netCLR] =>
[ClrVersion] => 0
)


UPD. Полученные данные свидетельствуют лишь о поддержке браузером некоторой технологии, а не о ее доступности, так как файл browscap.ini это по сути база данных всех веб-клиентов, в которой по значению User-Agent браузера предоставляется информация о поддерживаемых этим браузером технологиях. Тоесть для современных браузеров при отключенных куках и яве соответствующие параметры все равно будут возвращать еденицу.

Куда применять эту функцию, надеюсь, каждый найдет для себя сам :)

Tags:
Hubs:
+42
Comments33

Articles