Check browser with php

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

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

Предистория

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

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

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

Читайте также:  Python json dump перенос строки

Что же делать

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

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

>
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 браузера предоставляется информация о поддерживаемых этим браузером технологиях. Тоесть для современных браузеров при отключенных куках и яве соответствующие параметры все равно будут возвращать еденицу.

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

Источник

Saved searches

Use saved searches to filter your results more quickly

You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session.

A PHP Class to detect a user’s Browser. This encapsulation provides a breakdown of the browser and the version of the browser using the browser’s user-agent string. This is not a guaranteed solution but provides an overall accurate way to detect what browser a user is using.

License

cbschuld/Browser.php

This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Читайте также:  Opening text files in python

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Sign In Required

Please sign in to use Codespaces.

Launching GitHub Desktop

If nothing happens, download GitHub Desktop and try again.

Launching GitHub Desktop

If nothing happens, download GitHub Desktop and try again.

Launching Xcode

If nothing happens, download Xcode and try again.

Launching Visual Studio Code

Your codespace will open once ready.

There was a problem preparing your codespace, please try again.

Latest commit

Git stats

Files

Failed to load latest commit information.

README.md

Build Status

Helps detect the user’s browser and platform at the PHP level via the user agent

You can add this library as a local, per-project dependency to your project using Composer:

composer require cbschuld/browser.php 

If you only need this library during development, for instance to run your project’s test suite, then you should add it as a development-time dependency:

composer require --dev cbschuld/browser.php 
$browser = new Browser(); if( $browser->getBrowser() == Browser::BROWSER_FIREFOX && $browser->getVersion() >=10 ) < echo 'You have FireFox version 10 or greater'; >

This solution identifies the following Browsers and does a best-guess on the version:

  • Opera ( Browser::BROWSER_OPERA )
  • WebTV ( Browser::BROWSER_WEBTV )
  • NetPositive ( Browser::BROWSER_NETPOSITIVE )
  • Edge ( Browser::BROWSER_EDGE )
  • Internet Explorer ( Browser::BROWSER_IE )
  • Pocket Internet Explorer ( Browser::BROWSER_POCKET_IE )
  • Galeon ( Browser::BROWSER_GALEON )
  • Konqueror ( Browser::BROWSER_KONQUEROR )
  • iCab ( Browser::BROWSER_ICAB )
  • OmniWeb ( Browser::BROWSER_OMNIWEB )
  • Phoenix ( Browser::BROWSER_PHOENIX )
  • Firebird ( Browser::BROWSER_FIREBIRD )
  • UCBrowser ( Browser::BROWSER_UCBROWSER )
  • Firefox ( Browser::BROWSER_FIREFOX )
  • Mozilla ( Browser::BROWSER_MOZILLA )
  • Palemoon ( Browser::BROWSER_PALEMOON )
  • curl ( Browser::BROWSER_CURL )
  • wget ( Browser::BROWSER_WGET )
  • Amaya ( Browser::BROWSER_AMAYA )
  • Lynx ( Browser::BROWSER_LYNX )
  • Safari ( Browser::BROWSER_SAFARI )
  • Playstation ( Browser::BROWSER_PLAYSTATION )
  • iPhone ( Browser::BROWSER_IPHONE )
  • iPod ( Browser::BROWSER_IPOD )
  • Google.s Android( Browser::BROWSER_ANDROID )
  • Google.s Chrome( Browser::BROWSER_CHROME )
  • GoogleBot( Browser::BROWSER_GOOGLEBOT )
  • Yahoo!.s Slurp( Browser::BROWSER_SLURP )
  • W3C.s Validator( Browser::BROWSER_W3CVALIDATOR )
  • BlackBerry( Browser::BROWSER_BLACKBERRY )

Operating System Detection

This solution identifies the following Operating Systems:

  • Windows ( Browser::PLATFORM_WINDOWS )
  • Windows CE ( Browser::PLATFORM_WINDOWS_CE )
  • Apple ( Browser::PLATFORM_APPLE )
  • Linux ( Browser::PLATFORM_LINUX )
  • Android ( Browser::PLATFORM_ANDROID )
  • OS/2 ( Browser::PLATFORM_OS2 )
  • BeOS ( Browser::PLATFORM_BEOS )
  • iPhone ( Browser::PLATFORM_IPHONE )
  • iPod ( Browser::PLATFORM_IPOD )
  • BlackBerry ( Browser::PLATFORM_BLACKBERRY )
  • FreeBSD ( Browser::PLATFORM_FREEBSD )
  • OpenBSD ( Browser::PLATFORM_OPENBSD )
  • NetBSD ( Browser::PLATFORM_NETBSD )
  • SunOS ( Browser::PLATFORM_SUNOS )
  • OpenSolaris ( Browser::PLATFORM_OPENSOLARIS )
  • iPad ( Browser::PLATFORM_IPAD )

Detecting the user’s browser type and version is helpful in web applications that harness some of the newer bleeding edge concepts. With the browser type and version you can notify users about challenges they may experience and suggest they upgrade before using such application. Not a great idea on a large scale public site; but on a private application this type of check can be helpful.

Читайте также:  Решение системы линейных уравнений php

In an active project of mine we have a pretty graphically intensive and visually appealing user interface which leverages a lot of transparent PNG files. Because we all know how great IE6 supports PNG files it was necessary for us to tell our users the lack of power their browser has in a kind way.

Searching for a way to do this at the PHP layer and not at the client layer was more of a challenge than I would have guessed; the only script available was written by Gary White and Gary no longer maintains this script because of reliability. I do agree 100% with Gary about the readability; however, there are realistic reasons to desire the user.s browser and browser version and if your visitor is not echoing a false user agent we can take an educated guess.

I based this solution off of Gary White’s original work but have since replaced all of his original code. Either way, thank you to Gary. Sadly, I never was able to get in touch with him regarding this solution.

The testing with PHPUnit against known user agents available in tests/lists. Each file is tab delimited with the following fields:

User Agent, User Agent Type, Browser, Version, Operating System, Operating System Version

Opera/9.80 (X11; Linux i686; Ubuntu/14.10) Presto/2.12.388 Version/12.16 Browser Opera 12.16 Linux Linux Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_2) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.186 Safari/535.1 Browser Chrome 14.0.835.186 Macintosh OS X 10_7_2 

Tests can be run by phpunit:

vendor/phpunit/phpunit/phpunit

About

A PHP Class to detect a user’s Browser. This encapsulation provides a breakdown of the browser and the version of the browser using the browser’s user-agent string. This is not a guaranteed solution but provides an overall accurate way to detect what browser a user is using.

Источник

Оцените статью