Esta é uma biblioteca de detecção de navegador extremamente complicada e quase completamente inútil. Inútil porque você não deve usar a detecção de navegador. Então pare agora mesmo e leia algo sobre detecção de recursos. Estou falando sério. Vá embora. Você vai me agradecer mais tarde.
A versão PHP do WhichBrowser para uso em um servidor. Totalmente compatível com PHP 7.0 ou superior, incluindo PHP 8.
Também disponível:
WhichBrowser/Parser-JavaScript
Uma versão JavaScript do WhichBrowser para uso com Node.js no servidor
Qual navegador/servidor
Um servidor escrito em PHP que fornece uma API JavaScript para uso no navegador
Mas por que quase completamente inútil e não completamente inútil? Bem, sempre há uma exceção à regra. Existem razões válidas para fazer a detecção de navegador: para melhorar a experiência do usuário ou para coletar informações sobre quais navegadores são usados em seu site. Meu site é html5test.com e queria saber qual pontuação pertence a qual navegador. E para fazer isso você precisa de uma biblioteca de detecção de navegador.
Por que é extremamente complicado?
Porque todo mundo mente. Sério, não existe um único navegador que seja completamente verdadeiro. Quase todos os navegadores dizem que são Netscape 5 e quase todos os navegadores WebKit dizem que são baseados no Gecko. Até mesmo o Internet Explorer 11 não afirma mais ser o IE, mas sim um navegador sem nome que é como o Gecko. E fica pior. É por isso que é complicado.
Que tipo de informação ele fornece? Você obtém um objeto legal que contém informações sobre o navegador, mecanismo de renderização, sistema operacional e dispositivo. Fornece nomes e versões e até mesmo fabricante e modelo do dispositivo. E WhichBrowser é bastante tenaz. Fornece informações que outros não fornecem. Por exemplo:
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 nunca é mencionado
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
Apesar do cabeçalho do useragent alegar ser um dispositivo Series40, sabemos que na verdade ele está executando a plataforma Asha e também sabemos que o OviBrowser foi renomeado para 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
O cabeçalho do useragent se parece com o Opera 11.10 no Linux, mas sabemos que é o Opera Mini. Podemos até descobrir o sistema operacional real e o modelo do dispositivo a partir de outros cabeçalhos.
WhichBrowser requer PHP 7.0 ou superior e suporta PHP 8. WhichBrowser é compatível com o padrão de carregamento automático PSR-4 e segue o estilo de codificação PSR-1 e PSR-2.
Você pode instalar o WhichBrowser usando o Composer - o gerenciador de pacotes padrão para PHP. O pacote é chamado whichbrowser/parser
.
composer require whichbrowser/parser
Você pode atualizar facilmente o WhichBrowser executando um comando simples.
composer update whichbrowser/parser
Você deve executar este comando com a maior freqüência possível. Você pode até considerar a criação de um cron job para essa finalidade.
A primeira etapa requer o autoloader do Composer:
<?php
require ' vendor/autoload.php ' ;
A segunda etapa é criar um novo objeto WhichBrowserParser
. Este objeto conterá todas as informações que a biblioteca puder encontrar sobre o navegador. O objeto possui um parâmetro obrigatório, seja os cabeçalhos enviados pelo navegador ou uma string useragent. Usar os cabeçalhos é preferível, pois permitirá uma melhor detecção, mas se você tiver apenas a string useragent, isso também funcionará.
Por exemplo:
$ result = new WhichBrowser Parser ( getallheaders ());
ou:
$ result = new WhichBrowser Parser ( $ _SERVER [ ' HTTP_USER_AGENT ' ]);
A variável $result
agora contém um objeto que você pode consultar para obter informações. Existem várias maneiras de acessar as informações.
Primeiro de tudo, você pode chamar a função toString()
para obter uma identificação legível por humanos:
" You are using " . $ result -> toString ();
// You are using Chrome 27 on OS X Mountain Lion 10.8
Outra possibilidade é consultar o objeto:
$ 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
Você também pode acessar essas propriedades diretamente:
$ result -> browser -> toString ();
// Chrome 27
$ result -> engine -> toString ();
// Blink
$ result -> os -> toString ();
// OS X Mountain Lion 10.8
Ou acesse partes dessas propriedades diretamente:
$ 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
Finalmente, você também pode consultar versões diretamente:
$ result -> browser -> version -> is ( ' > ' , 26 );
// true
$ result -> os -> version -> is ( ' < ' , ' 10.7.4 ' );
// false
É possível definir opções adicionais passando um array como segundo parâmetro ao criar o objeto Parser
.
Em alguns casos, você pode querer desabilitar a detecção de bots. Isso permite que o bot engane deliberadamente o WhichBrowser, para que você possa identificar a identidade do agente do usuário que o bot tenta imitar. Isso é especialmente útil quando você deseja usar o WhichBrowser para alternar entre as diferentes variantes do seu site e deseja garantir que os rastreadores vejam a variante correta do site. Por exemplo, um bot que imita um dispositivo móvel verá a variante móvel do seu site.
$ result = new WhichBrowser Parser ( getallheaders (), [ ' detectBots ' => false ]);
WhichBrowser oferece suporte a adaptadores de cache compatíveis com PSR-6 para armazenar resultados em cache entre solicitações. Usar um cache é especialmente útil se você usar o WhichBrowser em todas as páginas do seu site e um usuário visitar várias páginas. Durante a primeira visita, os cabeçalhos serão analisados e o resultado será armazenado em cache. Após novas visitas, os resultados armazenados em cache serão usados, o que é muito mais rápido do que ter que analisar os cabeçalhos repetidas vezes.
Existem adaptadores disponíveis para outros tipos de caches, como APC, Doctrine, Memcached, MongoDB, Redis e muitos mais. A configuração desses adaptadores é diferente entre si, mas uma vez configurados, basta passá-lo como uma opção ao criar o objeto Parser
ou usar a função setCache()
para configurá-lo posteriormente. WhichBrowser foi testado para funcionar com os adaptadores fornecidos pelo PHP Cache. Para obter uma lista de outros pacotes que fornecem adaptadores, consulte Packagist.
Por exemplo, se você deseja habilitar um cache baseado em memcached, você precisa instalar um pacote extra do compositor:
composer require cache/memcached-adapter
E altere a chamada para WhichBrowser/Parser da seguinte maneira:
$ client = new Memcached ();
$ client -> addServer ( ' localhost ' , 11211 );
$ pool = new Cache Adapter Memcached MemcachedCachePool ( $ client );
$ result = new WhichBrowser Parser ( getallheaders (), [ ' cache ' => $ pool ]);
ou
$ client = new Memcached ();
$ client -> addServer ( ' localhost ' , 11211 );
$ pool = new Cache Adapter Memcached MemcachedCachePool ( $ client );
$ result = new WhichBrowser Parser ();
$ result -> setCache ( $ pool );
$ result -> analyse ( getallheaders ());
Você também pode especificar após quantos segundos um resultado armazenado em cache deve ser descartado. O valor padrão é 900 segundos ou 15 minutos. Se você acha que WhichBrowser usa muita memória para armazenamento em cache, diminua esse valor. Você pode fazer isso definindo a opção cacheExpires
ou passando-a como um segundo parâmetro para a função setCache()
.
Depois que um novo objeto WhichBrowserParser
é criado, ele contém diversas propriedades e funções. Todas essas propriedades têm presença garantida.
Propriedades:
browser
engine
os
device
Funções:
getType()
Retorna a propriedade type
e subtype
do objeto device
. Se um subtipo estiver presente, ele será concatenado ao tipo e separado por uma semicor, por exemplo: mobile:smart
ou gaming:portable
. Caso o subtipo não seja aplicável, basta retornar o tipo, por exemplo: desktop
ou ereader
.
isType($type [,$type [,$type [,$type]]])
Se um único argumento for usado, a função retornará true
se o argumento corresponder à propriedade type
do objeto device
. Opcionalmente, o argumento também pode fornecer um subtipo concatenando-o ao tipo e separando-o com ponto e vírgula. Ela pode usar vários argumentos, caso em que a função retornará true
se um dos argumentos corresponder. Se nenhum dos argumentos corresponder, retorna false
isMobile()
Retorna true
se o navegador for um dispositivo móvel, como um telefone, tablet, ereader, câmera, reprodutor de mídia portátil, relógio ou console de jogos portátil. Caso contrário, retorna false
.
isBrowser($name [, $comparison, $version])
É usado para consultar a propriedade de name
e version
do objeto browser
. A função pode conter um único argumento para uma comparação simples baseada em name
ou três argumentos para comparar name
e version
. O primeiro argumento sempre contém o nome do navegador. O segundo argumento é uma string que pode conter <
, <=
, =
, =>
ou >
. O terceiro é um número inteiro, flutuante ou string que contém a versão. Você pode usar versões como 10
, 10.7
ou '10.7.4'
. Para obter mais informações sobre como as comparações de versões são realizadas, consulte a função is()
do objeto Version
.
isEngine($name [, $comparison, $version])
É usado para consultar a propriedade de name
e version
do objeto engine
. Esta função funciona exatamente da mesma maneira que isBrowser
.
isOs($name [, $comparison, $version])
É usado para consultar a propriedade de name
e version
do objeto os
. Esta função funciona exatamente da mesma maneira que isBrowser
.
isDetected()
Foi realmente detectado algum navegador ou não conseguimos detectar nada?
toString()
Obtenha uma representação legível do navegador detectado, incluindo sistema operacional e informações do dispositivo.
Um objeto da classe WhichBrowserModelBrowser
é usado para a propriedade browser
do objeto principal WhichBrowserParser
e contém diversas propriedades. Se uma propriedade não for aplicável nesta situação, será nula ou indefinida.
Propriedades:
name
alias
version
stock
channel
mode
hidden
family
using
Funções:
isFamily($name)
A família deste navegador tem esse nome ou o próprio navegador tem esse nome?
isUsing($name)
O navegador está usando um webview com o nome fornecido.
getName()
Obtenha o nome do navegador
getVersion()
Obtenha a versão do navegador
toString()
Obtenha uma representação legível do navegador detectado
Um objeto da classe WhichBrowserModelEngine
é usado para a propriedade engine
do objeto principal WhichBrowserParser
e contém diversas propriedades. Se uma propriedade não for aplicável nesta situação, será nula ou indefinida.
Propriedades:
name
version
Funções:
getName()
Obtenha o nome do mecanismo de renderização
getVersion()
Obtenha a versão do mecanismo de renderização
toString()
Obtenha uma representação legível do mecanismo de renderização detectado
Um objeto da classe WhichBrowserModelOs
é usado para a propriedade os
do objeto principal WhichBrowserParser
e contém várias propriedades. Se uma propriedade não for aplicável nesta situação, será nula ou indefinida.
Propriedades:
name
version
family
Funções:
isFamily($name)
A família deste sistema operacional tem esse nome ou o próprio sistema operacional tem esse nome?
getName()
Obtenha o nome do sistema operacional
getVersion()
Obtenha a versão do sistema operacional
toString()
Obtenha uma representação legível do sistema operacional detectado
Um objeto da classe WhichBrowserModelDevice
é usado para a propriedade device
do objeto principal WhichBrowserParser
e contém diversas propriedades. Se uma propriedade não for aplicável nesta situação, será nula ou indefinida.
Propriedades:
type
subtype
identified
manufacturer
model
A propriedade type
pode conter qualquer valor da lista a seguir:
Se o type
for "mobile", a propriedade subtype
poderá conter qualquer valor da lista a seguir:
Se o type
for "gaming", a propriedade subtype
poderá conter qualquer valor da lista a seguir:
Funções:
getManufacturer()
Obtenha o nome do fabricante
getModel()
Obtenha o nome do modelo
toString()
Obtenha uma representação legível do dispositivo detectado
Um objeto da classe WhichBrowserModelFamily
é usado para a propriedade family
do objeto WhichBrowserModelBrowser
e WhichBrowserModelOs
e contém diversas propriedades. Se uma propriedade não for aplicável nesta situação, será nula ou indefinida.
Propriedades:
name
version
Funções:
getName()
Obtenha o nome da família
getVersion()
Obtenha a versão da família
toString()
Obtenha uma representação legível da família
Um objeto da classe WhichBrowserModelUsing
é usado para a propriedade using
do objeto WhichBrowserModelBrowser
e contém diversas propriedades. Se uma propriedade não for aplicável nesta situação, será nula ou indefinida.
Propriedades:
name
version
Funções:
getName()
Obtenha o nome do webview
getVersion()
Obtenha a versão do webview
toString()
Obtenha uma representação legível do webview
Um objeto da classe WhichBrowserModelVersion
é usado para a propriedade version
do objeto browser
, engine
e os
e contém várias propriedades e funções. Se uma propriedade não for aplicável nesta situação, será nula ou indefinida.
Propriedades:
value
alias
nickname
details
Funções:
is($version)
ou is($comparison, $version)
Usando esta função é fácil comparar uma versão com outra versão. Se você especificar apenas um argumento, esta função retornará se as versões forem iguais. Você também pode especificar dois argumentos, nesse caso o primeiro argumento contém o operador de comparação, como <
, <=
, =
, =>
ou >
. O segundo argumento é a versão com a qual você deseja compará-la. Você pode usar versões como 10
, 10.7
ou '10.7.4'
, mas esteja ciente de que 10
não é o mesmo que 10.0
. Por exemplo, se a versão do nosso sistema operacional for 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