Это чрезвычайно сложная и почти совершенно бесполезная библиотека для анализа браузера. Бесполезно, потому что вам не следует использовать анализ браузера. Так что остановитесь прямо сейчас и вместо этого почитайте что-нибудь об обнаружении функций. Я серьезно. Уходите. Ты скажешь мне спасибо позже.
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 он содержит ряд свойств и функций. Все эти свойства гарантированно присутствуют.
Характеристики:
browserengineosdeviceФункции:
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 и содержит ряд свойств. Если свойство неприменимо в этой ситуации, оно будет нулевым или неопределенным.
Характеристики:
namealiasversionstockchannelmodehiddenfamilyusingФункции:
isFamily($name)
Имеет ли семейство этого браузера такое имя или такое имя имеет сам браузер?
isUsing($name)
Использует ли браузер веб-просмотр с указанным именем.
getName()
Получить имя браузера
getVersion()
Узнать версию браузера
toString()
Получите удобочитаемое представление обнаруженного браузера.
Объект класса WhichBrowserModelEngine используется в качестве свойства engine основного объекта WhichBrowserParser и содержит ряд свойств. Если свойство неприменимо в этой ситуации, оно будет нулевым или неопределенным.
Характеристики:
nameversionФункции:
getName()
Получить имя механизма рендеринга
getVersion()
Получить версию движка рендеринга
toString()
Получите удобочитаемое представление обнаруженного механизма рендеринга.
Объект класса WhichBrowserModelOs используется в качестве свойства os основного объекта WhichBrowserParser и содержит ряд свойств. Если свойство неприменимо в этой ситуации, оно будет нулевым или неопределенным.
Характеристики:
nameversionfamilyФункции:
isFamily($name)
Имеет ли это имя семейство этой операционной системы или такое имя имеет сама операционная система?
getName()
Получить название операционной системы
getVersion()
Узнать версию операционной системы
toString()
Получите удобочитаемое представление обнаруженной операционной системы.
Объект класса WhichBrowserModelDevice используется в качестве свойства device основного объекта WhichBrowserParser и содержит ряд свойств. Если свойство неприменимо в этой ситуации, оно будет нулевым или неопределенным.
Характеристики:
typesubtypeidentifiedmanufacturermodel Свойство type может содержать любое значение из следующего списка:
Если type «мобильный», свойство subtype может содержать любое значение из следующего списка:
Если type «игровой», свойство subtype может содержать любое значение из следующего списка:
Функции:
getManufacturer()
Узнать название производителя
getModel()
Узнать название модели
toString()
Получите удобочитаемое представление обнаруженного устройства.
Объект класса WhichBrowserModelFamily используется в качестве свойства family объектов WhichBrowserModelBrowser и WhichBrowserModelOs и содержит ряд свойств. Если свойство неприменимо в этой ситуации, оно будет нулевым или неопределенным.
Характеристики:
nameversionФункции:
getName()
Узнать имя семьи
getVersion()
Получить версию семейства
toString()
Получите удобочитаемое представление семейства
Объект класса WhichBrowserModelUsing используется для свойства using объекта WhichBrowserModelBrowser и содержит ряд свойств. Если свойство неприменимо в этой ситуации, оно будет нулевым или неопределенным.
Характеристики:
nameversionФункции:
getName()
Получить имя веб-просмотра
getVersion()
Получить версию веб-просмотра
toString()
Получите удобочитаемое представление веб-просмотра.
Объект класса WhichBrowserModelVersion используется для свойства version объекта browser , engine и os и содержит ряд свойств и функций. Если свойство неприменимо в этой ситуации, оно будет нулевым или неопределенным.
Характеристики:
valuealiasnicknamedetailsФункции:
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