Это чрезвычайно сложная и почти совершенно бесполезная библиотека для анализа браузера. Бесполезно, потому что вам не следует использовать анализ браузера. Так что остановитесь прямо сейчас и вместо этого почитайте что-нибудь об обнаружении функций. Я серьезно. Уходите. Ты скажешь мне спасибо позже.
PHP-версия WhichBrowser для использования на сервере. Полностью совместим с PHP 7.0 или выше, включая PHP 8.
Также доступны:
Какой браузер/парсер-JavaScript
JavaScript-версия WhichBrowser для использования с Node.js на сервере.
Какой браузер/сервер
Сервер, написанный на PHP и предоставляющий API JavaScript для использования в браузере.
Но почему почти полностью бесполезный , а не совсем бесполезный? Ну, всегда есть исключение из правил. Есть веские причины для анализа браузера: улучшить взаимодействие с пользователем или собрать информацию о том, какие браузеры используются на вашем веб-сайте. Мой веб-сайт — html5test.com, и я хотел знать, какой балл принадлежит какому браузеру. И для этого вам понадобится библиотека анализа браузера.
Почему это чрезвычайно сложно?
Потому что все лгут. Серьезно, не существует ни одного браузера, который был бы полностью правдивым. Почти все браузеры говорят, что это Netscape 5, и почти все браузеры WebKit говорят, что они основаны на Gecko. Даже Internet Explorer 11 теперь вообще не претендует на звание IE, а представляет собой безымянный браузер, похожий на Gecko. И становится еще хуже. Вот почему это сложно.
Какую информацию он дает? Вы получаете красивый объект, содержащий информацию о браузере, механизме рендеринга, операционной системе и устройстве. Он дает вам имена и версии и даже производителя и модель устройства. А WhichBrowser довольно живуч. Он дает вам информацию, которой нет у других. Например:
JUC (Linux; U; 2.3.6; zh-cn; GT-I8150; 480*800) UCWEB8.7.4.225/145/800
UC Browser 8.7 on a Samsung Galaxy W running Android 2.3.6
Android никогда не упоминается
Mozilla/5.0 (Series40; Nokia501/10.0.2; Profile/MIDP-2.1 Configuration/CLDC-1.1) Gecko/20100401 S40OviBrowser/3.0.0.0.73
Nokia Xpress 3.0.0 on a Nokia Asha 501 running Nokia Asha Platform
Несмотря на то, что заголовок useragent утверждает, что это устройство Series40, мы знаем, что на самом деле оно работает на платформе Asha, а также мы знаем, что OviBrowser был переименован в Nokia Xpress.
Opera/9.80 (X11; Linux zvav; U; zh) Presto/2.8.119 Version/11.10
Opera Mini on a Nokia 5230 running Series60 5.0
Заголовок useragent выглядит как Opera 11.10 в Linux, но мы знаем, что это Opera Mini. Мы даже можем узнать реальную операционную систему и модель устройства из других заголовков.
WhichBrowser требует PHP 7.0 или выше и поддерживает PHP 8. WhichBrowser совместим со стандартом автозагрузки PSR-4 и соответствует стилю кодирования PSR-1 и PSR-2.
Вы можете установить WhichBrowser с помощью Composer — стандартного менеджера пакетов для PHP. Пакет называется whichbrowser/parser
.
composer require whichbrowser/parser
Вы можете легко обновить WhichBrowser, выполнив простую команду.
composer update whichbrowser/parser
Вам следует запускать эту команду как можно чаще. Возможно, вы даже захотите настроить для этой цели задание cron.
Для первого шага потребуется автозагрузчик Composer:
<?php
require ' vendor/autoload.php ' ;
Второй шаг — создать новый объект WhichBrowserParser
. Этот объект будет содержать всю информацию о браузере, которую может найти библиотека. У объекта есть обязательный параметр: либо заголовки, отправленные браузером, либо строка агента пользователя. Использование заголовков предпочтительнее, поскольку это позволит лучше обнаружить, но если у вас есть только строка useragent, это также сработает.
Например:
$ result = new WhichBrowser Parser ( getallheaders ());
или:
$ result = new WhichBrowser Parser ( $ _SERVER [ ' HTTP_USER_AGENT ' ]);
Переменная $result
теперь содержит объект, информацию о котором вы можете запросить. Существуют различные способы доступа к информации.
Прежде всего, вы можете вызвать функцию toString()
чтобы получить удобочитаемую идентификацию:
" You are using " . $ result -> toString ();
// You are using Chrome 27 on OS X Mountain Lion 10.8
Другая возможность — запросить объект:
$ result -> isType ( ' desktop ' );
// true
$ result -> isType ( ' mobile ' , ' tablet ' , ' media ' , ' gaming:portable ' );
// false
$ result -> isBrowser ( ' Maxthon ' , ' < ' , ' 4.0.5 ' );
// false
$ result -> isOs ( ' iOS ' , ' >= ' , ' 8 ' );
// false
$ result -> isOs ( ' OS X ' );
// true
$ result -> isEngine ( ' Blink ' );
// true
Вы также можете получить доступ к этим свойствам напрямую:
$ result -> browser -> toString ();
// Chrome 27
$ result -> engine -> toString ();
// Blink
$ result -> os -> toString ();
// OS X Mountain Lion 10.8
Или получите доступ к частям этих свойств напрямую:
$ result -> browser -> name ;
// Chrome
$ result -> browser -> name . ' ' . $ result -> browser -> version -> toString ();
// Chrome 27
$ result -> browser -> version -> value ;
// 27.0 . 1453.110
$ result -> engine -> name ;
// Blink
Наконец, вы также можете напрямую запросить версии:
$ result -> browser -> version -> is ( ' > ' , 26 );
// true
$ result -> os -> version -> is ( ' < ' , ' 10.7.4 ' );
// false
Можно установить дополнительные параметры, передав массив в качестве второго параметра при создании объекта Parser
.
В некоторых случаях вам может потребоваться отключить обнаружение ботов. Это позволяет боту намеренно обмануть WhichBrowser, так что вы сможете определить личность пользовательского агента, который бот пытается имитировать. Это особенно удобно, если вы хотите использовать WhichBrowser для переключения между различными вариантами вашего веб-сайта и хотите, чтобы сканеры видели правильный вариант веб-сайта. Например, бот, имитирующий мобильное устройство, увидит мобильную версию вашего сайта.
$ result = new WhichBrowser Parser ( getallheaders (), [ ' detectBots ' => false ]);
WhichBrowser поддерживает адаптеры кэша, совместимые с PSR-6, для кэширования результатов между запросами. Использование кеша особенно полезно, если вы используете WhichBrowser на каждой странице вашего сайта, а пользователь посещает несколько страниц. Во время первого посещения заголовки будут проанализированы, а результат будет кэширован. При дальнейших посещениях будут использоваться кэшированные результаты, что намного быстрее, чем снова и снова анализировать заголовки.
Доступны адаптеры для других типов кешей, таких как APC, Doctrine, Memcached, MongoDB, Redis и многих других. Все конфигурации этих адаптеров отличаются друг от друга, но после настройки все, что вам нужно сделать, это передать его в качестве опции при создании объекта Parser
или использовать функцию setCache()
, чтобы установить его впоследствии. WhichBrowser был протестирован для работы с адаптерами, предоставляемыми PHP Cache. Список других пакетов, предоставляющих адаптеры, см. в Packagist.
Например, если вы хотите включить кеш на основе memcached, вам необходимо установить дополнительный пакет композитора:
composer require cache/memcached-adapter
И измените вызов WhichBrowser/Parser следующим образом:
$ client = new Memcached ();
$ client -> addServer ( ' localhost ' , 11211 );
$ pool = new Cache Adapter Memcached MemcachedCachePool ( $ client );
$ result = new WhichBrowser Parser ( getallheaders (), [ ' cache ' => $ pool ]);
или
$ client = new Memcached ();
$ client -> addServer ( ' localhost ' , 11211 );
$ pool = new Cache Adapter Memcached MemcachedCachePool ( $ client );
$ result = new WhichBrowser Parser ();
$ result -> setCache ( $ pool );
$ result -> analyse ( getallheaders ());
Вы также можете указать, через сколько секунд кэшированный результат должен быть удален. Значение по умолчанию — 900 секунд или 15 минут. Если вы считаете, что WhichBrowser использует слишком много памяти для кэширования, вам следует уменьшить это значение. Вы можете сделать это, установив параметр cacheExpires
или передав его в качестве второго параметра функции setCache()
.
После создания нового объекта WhichBrowserParser
он содержит ряд свойств и функций. Все эти свойства гарантированно присутствуют.
Характеристики:
browser
engine
os
device
Функции:
getType()
Возвращает свойство type
и subtype
объекта device
. Если подтип присутствует, он объединяется с типом и отделяется полуцветом, например: mobile:smart
или gaming:portable
. Если подтип неприменим, он просто возвращает тип, например: desktop
или ereader
.
isType($type [,$type [,$type [,$type]]])
Если используется один аргумент, функция возвращает true
, если аргумент соответствует свойству type
объекта device
. Аргумент также может дополнительно предоставить подтип, объединив его с типом и разделив точкой с запятой. Он может использовать несколько аргументов, и в этом случае функция возвращает true
если один из аргументов совпадает. Если ни один из аргументов не соответствует, возвращается false
isMobile()
Возвращайте true
если браузер является мобильным устройством, например телефоном, планшетом, устройством для чтения электронных книг, камерой, портативным медиаплеером, часами или портативной игровой консолью. В противном случае он возвращает false
.
isBrowser($name [, $comparison, $version])
Используется для запроса name
и свойства version
объекта browser
. Функция может содержать один аргумент для простого сравнения по name
или три аргумента для сравнения name
и version
. Первый аргумент всегда содержит имя браузера. Второй аргумент — это строка, которая может содержать либо <
, <=
, =
, =>
или >
. Третий — целое число, число с плавающей запятой или строка, содержащая версию. Вы можете использовать такие версии, как 10
, 10.7
или '10.7.4'
. Для получения дополнительной информации о том, как выполняется сравнение версий, см. функцию is()
объекта Version
.
isEngine($name [, $comparison, $version])
Используется для запроса name
и свойства version
объекта engine
. Эта функция работает точно так же, как isBrowser
.
isOs($name [, $comparison, $version])
Используется для запроса name
и свойства version
объекта os
. Эта функция работает точно так же, как isBrowser
.
isDetected()
Действительно ли обнаружен какой-то браузер, или нам ничего не удалось обнаружить?
toString()
Получите удобочитаемое представление обнаруженного браузера, включая информацию об операционной системе и устройстве.
Объект класса WhichBrowserModelBrowser
используется в качестве свойства browser
основного объекта WhichBrowserParser
и содержит ряд свойств. Если свойство неприменимо в этой ситуации, оно будет нулевым или неопределенным.
Характеристики:
name
alias
version
stock
channel
mode
hidden
family
using
Функции:
isFamily($name)
Имеет ли семейство этого браузера такое имя или такое имя имеет сам браузер?
isUsing($name)
Использует ли браузер веб-просмотр с указанным именем.
getName()
Получить имя браузера
getVersion()
Узнать версию браузера
toString()
Получите удобочитаемое представление обнаруженного браузера.
Объект класса WhichBrowserModelEngine
используется в качестве свойства engine
основного объекта WhichBrowserParser
и содержит ряд свойств. Если свойство неприменимо в этой ситуации, оно будет нулевым или неопределенным.
Характеристики:
name
version
Функции:
getName()
Получить имя механизма рендеринга
getVersion()
Получить версию движка рендеринга
toString()
Получите удобочитаемое представление обнаруженного механизма рендеринга.
Объект класса WhichBrowserModelOs
используется в качестве свойства os
основного объекта WhichBrowserParser
и содержит ряд свойств. Если свойство неприменимо в этой ситуации, оно будет нулевым или неопределенным.
Характеристики:
name
version
family
Функции:
isFamily($name)
Имеет ли это имя семейство этой операционной системы или такое имя имеет сама операционная система?
getName()
Получить название операционной системы
getVersion()
Узнать версию операционной системы
toString()
Получите удобочитаемое представление обнаруженной операционной системы.
Объект класса WhichBrowserModelDevice
используется в качестве свойства device
основного объекта WhichBrowserParser
и содержит ряд свойств. Если свойство неприменимо в этой ситуации, оно будет нулевым или неопределенным.
Характеристики:
type
subtype
identified
manufacturer
model
Свойство type
может содержать любое значение из следующего списка:
Если type
«мобильный», свойство subtype
может содержать любое значение из следующего списка:
Если type
«игровой», свойство subtype
может содержать любое значение из следующего списка:
Функции:
getManufacturer()
Узнать название производителя
getModel()
Узнать название модели
toString()
Получите удобочитаемое представление обнаруженного устройства.
Объект класса WhichBrowserModelFamily
используется в качестве свойства family
объектов WhichBrowserModelBrowser
и WhichBrowserModelOs
и содержит ряд свойств. Если свойство неприменимо в этой ситуации, оно будет нулевым или неопределенным.
Характеристики:
name
version
Функции:
getName()
Узнать имя семьи
getVersion()
Получить версию семейства
toString()
Получите удобочитаемое представление семейства
Объект класса WhichBrowserModelUsing
используется для свойства using
объекта WhichBrowserModelBrowser
и содержит ряд свойств. Если свойство неприменимо в этой ситуации, оно будет нулевым или неопределенным.
Характеристики:
name
version
Функции:
getName()
Получить имя веб-просмотра
getVersion()
Получить версию веб-просмотра
toString()
Получите удобочитаемое представление веб-просмотра.
Объект класса WhichBrowserModelVersion
используется для свойства version
объекта browser
, engine
и os
и содержит ряд свойств и функций. Если свойство неприменимо в этой ситуации, оно будет нулевым или неопределенным.
Характеристики:
value
alias
nickname
details
Функции:
is($version)
или is($comparison, $version)
Используя эту функцию, легко сравнить одну версию с другой версией. Если вы укажете только один аргумент, эта функция вернет результат, если версии одинаковы. Вы также можете указать два аргумента, в этом случае первый аргумент содержит оператор сравнения, например <
, <=
, =
, =>
или >
. Второй аргумент — это версия, с которой вы хотите сравнить. Вы можете использовать такие версии, как 10
, 10.7
или '10.7.4'
, но имейте в виду, что 10
— это не то же самое, что 10.0
. Например, если наша версия ОС 10.7.4
:
$ result -> os -> version -> is ( ' 10.7.4 ' );
// true
$ result -> os -> version -> is ( ' 10.7 ' );
// true
$ result -> os -> version -> is ( ' 10 ' );
// true
$ result -> os -> version -> is ( ' 10.0 ' );
// false
$ result -> os -> version -> is ( ' > ' , ' 10 ' );
// false
$ result -> os -> version -> is ( ' > ' , ' 10.7 ' );
// false
$ result -> os -> version -> is ( ' > ' , ' 10.7.3 ' );
// true