Esta es una biblioteca de rastreo de navegadores extremadamente complicada y casi completamente inútil. Inútil porque no deberías utilizar el rastreo del navegador. Así que detente ahora mismo y lee algo sobre la detección de funciones. Lo digo en serio. Irse. Me lo agradecerás más tarde.
La versión PHP de WhichBrowser para usar en un servidor. Totalmente compatible con PHP 7.0 o superior, incluido PHP 8.
También disponible:
WhichBrowser/Parser-JavaScript
Una versión JavaScript de WhichBrowser para usar con Node.js en el servidor
Qué navegador/servidor
Un servidor escrito en PHP que proporciona una API de JavaScript para usar en el navegador
Pero ¿por qué casi completamente inútil y no completamente inútil? Bueno, siempre hay una excepción a la regla. Existen razones válidas para rastrear el navegador: mejorar la experiencia del usuario o recopilar información sobre qué navegadores se utilizan en su sitio web. Mi sitio web es html5test.com y quería saber qué puntuación pertenece a cada navegador. Y para hacer eso necesitas una biblioteca de rastreo de navegador.
¿Por qué es extremadamente complicado?
Porque todo el mundo miente. En serio, no hay un solo navegador que sea completamente veraz. Casi todos los navegadores dicen que son Netscape 5 y casi todos los navegadores WebKit dicen que están basados en Gecko. Incluso Internet Explorer 11 ya no pretende ser IE, sino un navegador sin nombre similar a Gecko. Y se pone peor. Por eso es complicado.
¿Qué tipo de información da? Obtiene un bonito objeto que tiene información sobre el navegador, el motor de renderizado, el sistema operativo y el dispositivo. Le brinda nombres y versiones e incluso fabricante y modelo del dispositivo. Y WhichBrowser es bastante tenaz. Te brinda información que otros no. Por ejemplo:
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 se menciona
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
A pesar de que el encabezado del agente de usuario afirma ser un dispositivo Serie 40, sabemos que en realidad ejecuta la plataforma Asha y también sabemos que OviBrowser pasó a llamarse 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
El encabezado del agente de usuario se parece a Opera 11.10 en Linux, pero sabemos que es Opera Mini. Incluso podemos descubrir el sistema operativo real y el modelo de dispositivo a partir de otros encabezados.
WhichBrowser requiere PHP 7.0 o superior y es compatible con PHP 8. WhichBrowser es compatible con el estándar de carga automática PSR-4 y sigue el estilo de codificación PSR-1 y PSR-2.
Puede instalar WhichBrowser utilizando Composer, el administrador de paquetes estándar para PHP. El paquete se llama whichbrowser/parser
.
composer require whichbrowser/parser
Puede actualizar WhichBrowser fácilmente ejecutando un comando simple.
composer update whichbrowser/parser
Debe ejecutar este comando con la mayor frecuencia posible. Quizás incluso quieras considerar configurar un trabajo cron para este propósito.
El primer paso requiere el cargador automático de Composer:
<?php
require ' vendor/autoload.php ' ;
El segundo paso es crear un nuevo objeto WhichBrowserParser
. Este objeto contendrá toda la información que la biblioteca pueda encontrar sobre el navegador. El objeto tiene un parámetro obligatorio, ya sea los encabezados enviados por el navegador o una cadena de agente de usuario. Es preferible usar los encabezados, porque permitirá una mejor detección, pero si solo tiene la cadena useragent, esto también funcionará.
Por ejemplo:
$ result = new WhichBrowser Parser ( getallheaders ());
o:
$ result = new WhichBrowser Parser ( $ _SERVER [ ' HTTP_USER_AGENT ' ]);
La variable $result
ahora contiene un objeto que puede consultar para obtener información. Hay varias formas de acceder a la información.
En primer lugar, puede llamar a la función toString()
para obtener una identificación legible por humanos:
" You are using " . $ result -> toString ();
// You are using Chrome 27 on OS X Mountain Lion 10.8
Otra posibilidad es consultar el 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
También puedes acceder a estas propiedades directamente:
$ result -> browser -> toString ();
// Chrome 27
$ result -> engine -> toString ();
// Blink
$ result -> os -> toString ();
// OS X Mountain Lion 10.8
O acceda directamente a partes de estas propiedades:
$ 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 también puedes consultar versiones directamente:
$ result -> browser -> version -> is ( ' > ' , 26 );
// true
$ result -> os -> version -> is ( ' < ' , ' 10.7.4 ' );
// false
Es posible configurar opciones adicionales pasando una matriz como segundo parámetro al crear el objeto Parser
.
En algunos casos es posible que desees desactivar la detección de bots. Esto permite que el bot engañe deliberadamente a WhichBrowser, para que usted pueda identificar la identidad del agente de usuario que el bot intenta imitar. Esto es especialmente útil cuando desea utilizar WhichBrowser para cambiar entre diferentes variantes de su sitio web y desea asegurarse de que los rastreadores vean la variante correcta del sitio web. Por ejemplo, un bot que imita un dispositivo móvil verá la variante móvil de su sitio.
$ result = new WhichBrowser Parser ( getallheaders (), [ ' detectBots ' => false ]);
WhichBrowser admite adaptadores de caché compatibles con PSR-6 para almacenar en caché los resultados entre solicitudes. Usar un caché es especialmente útil si usa WhichBrowser en cada página de su sitio web y un usuario visita varias páginas. Durante la primera visita, se analizarán los encabezados y el resultado se almacenará en caché. En futuras visitas, se utilizarán los resultados almacenados en caché, lo cual es mucho más rápido que tener que analizar los encabezados una y otra vez.
Hay adaptadores disponibles para otros tipos de cachés, como APC, Doctrine, Memcached, MongoDB, Redis y muchos más. La configuración de estos adaptadores difiere entre sí, pero una vez configurados, todo lo que tiene que hacer es pasarlo como una opción al crear el objeto Parser
, o usar la función setCache()
para configurarlo después. WhichBrowser ha sido probado para funcionar con los adaptadores proporcionados por PHP Cache. Para obtener una lista de otros paquetes que proporcionan adaptadores, consulte Packagist.
Por ejemplo, si desea habilitar un caché basado en Memcached, necesita instalar un paquete de compositor adicional:
composer require cache/memcached-adapter
Y cambie la llamada a WhichBrowser/Parser de la siguiente manera:
$ client = new Memcached ();
$ client -> addServer ( ' localhost ' , 11211 );
$ pool = new Cache Adapter Memcached MemcachedCachePool ( $ client );
$ result = new WhichBrowser Parser ( getallheaders (), [ ' cache ' => $ pool ]);
o
$ client = new Memcached ();
$ client -> addServer ( ' localhost ' , 11211 );
$ pool = new Cache Adapter Memcached MemcachedCachePool ( $ client );
$ result = new WhichBrowser Parser ();
$ result -> setCache ( $ pool );
$ result -> analyse ( getallheaders ());
También puede especificar después de cuántos segundos se debe descartar un resultado almacenado en caché. El valor predeterminado es 900 segundos o 15 minutos. Si cree que WhichBrowser utiliza demasiada memoria para el almacenamiento en caché, debe reducir este valor. Puede hacer esto configurando la opción cacheExpires
o pasándola como segundo parámetro a la función setCache()
.
Después de crear un nuevo objeto WhichBrowserParser
, contiene una serie de propiedades y funciones. Se garantiza que todas estas propiedades estarán presentes.
Propiedades:
browser
engine
os
device
Funciones:
getType()
Devuelve la propiedad type
y subtype
del objeto device
. Si hay un subtipo presente, se concatena con el tipo y se separa por un semicolor, por ejemplo: mobile:smart
o gaming:portable
. Si el subtipo no es aplicable, simplemente devuelve el tipo, por ejemplo: desktop
o ereader
.
isType($type [,$type [,$type [,$type]]])
Si se utiliza un solo argumento, la función devuelve true
si el argumento coincide con el type
de propiedad del objeto device
. Opcionalmente, el argumento también puede proporcionar un subtipo concatenándolo con el tipo y separándolo con un punto y coma. Puede utilizar varios argumentos, en cuyo caso la función devuelve true
si uno de los argumentos coincide. Si ninguno de los argumentos coincide, devuelve false
isMobile()
Devuelve true
si el navegador es un dispositivo móvil, como un teléfono, tableta, lector electrónico, cámara, reproductor multimedia portátil, reloj o consola de juegos portátil. De lo contrario devuelve false
.
isBrowser($name [, $comparison, $version])
Se utiliza para consultar el name
y la propiedad version
del objeto browser
. La función puede contener un único argumento para una comparación simple basada en name
, o tres argumentos para comparar tanto name
como version
. El primer argumento siempre contiene el nombre del navegador. El segundo argumento es una cadena que puede contener <
, <=
, =
, =>
o >
. El tercero es un número entero, flotante o cadena que contiene la versión. Puede utilizar versiones como 10
, 10.7
o '10.7.4'
. Para obtener más información sobre cómo se realizan las comparaciones de versiones, consulte la función is()
del objeto Version
.
isEngine($name [, $comparison, $version])
Se utiliza para consultar el name
y la propiedad version
del objeto engine
. Esta función funciona exactamente de la misma manera que isBrowser
.
isOs($name [, $comparison, $version])
Se utiliza para consultar el name
y la propiedad version
del objeto os
. Esta función funciona exactamente de la misma manera que isBrowser
.
isDetected()
¿Se detectó realmente algún navegador o no pudimos detectar nada?
toString()
Obtenga una representación legible por humanos del navegador detectado, incluido el sistema operativo y la información del dispositivo.
Un objeto de la clase WhichBrowserModelBrowser
se utiliza para la propiedad browser
del objeto principal WhichBrowserParser
y contiene varias propiedades. Si una propiedad no es aplicable en esta situación será nula o indefinida.
Propiedades:
name
alias
version
stock
channel
mode
hidden
family
using
Funciones:
isFamily($name)
¿La familia de este navegador tiene este nombre o el navegador mismo tiene este nombre?
isUsing($name)
¿El navegador utiliza una vista web con el nombre proporcionado?
getName()
Obtener el nombre del navegador
getVersion()
Obtener la versión del navegador
toString()
Obtenga una representación legible por humanos del navegador detectado
Un objeto de la clase WhichBrowserModelEngine
se utiliza para la propiedad engine
del objeto principal WhichBrowserParser
y contiene varias propiedades. Si una propiedad no es aplicable en esta situación será nula o indefinida.
Propiedades:
name
version
Funciones:
getName()
Obtener el nombre del motor de renderizado
getVersion()
Obtenga la versión del motor de renderizado
toString()
Obtenga una representación legible por humanos del motor de renderizado detectado
Un objeto de la clase WhichBrowserModelOs
se utiliza para la propiedad os
del objeto principal WhichBrowserParser
y contiene varias propiedades. Si una propiedad no es aplicable en esta situación será nula o indefinida.
Propiedades:
name
version
family
Funciones:
isFamily($name)
¿La familia de este sistema operativo tiene este nombre o el sistema operativo en sí tiene este nombre?
getName()
Obtener el nombre del sistema operativo
getVersion()
Obtener la versión del sistema operativo
toString()
Obtenga una representación legible por humanos del sistema operativo detectado
Un objeto de la clase WhichBrowserModelDevice
se utiliza para la propiedad device
del objeto principal WhichBrowserParser
y contiene varias propiedades. Si una propiedad no es aplicable en esta situación será nula o indefinida.
Propiedades:
type
subtype
identified
manufacturer
model
La propiedad type
puede contener cualquier valor de la siguiente lista:
Si el type
es "móvil", la propiedad subtype
puede contener cualquier valor de la siguiente lista:
Si el type
es "juegos", la propiedad subtype
puede contener cualquier valor de la siguiente lista:
Funciones:
getManufacturer()
Obtenga el nombre del fabricante
getModel()
Obtener el nombre del modelo
toString()
Obtenga una representación legible por humanos del dispositivo detectado
Un objeto de la clase WhichBrowserModelFamily
se utiliza para la propiedad family
del objeto WhichBrowserModelBrowser
y WhichBrowserModelOs
y contiene varias propiedades. Si una propiedad no es aplicable en esta situación será nula o indefinida.
Propiedades:
name
version
Funciones:
getName()
Obtener el nombre de la familia
getVersion()
Obtén la versión de la familia.
toString()
Obtenga una representación legible por humanos de la familia
Un objeto de la clase WhichBrowserModelUsing
se utiliza para la propiedad using
del objeto WhichBrowserModelBrowser
y contiene varias propiedades. Si una propiedad no es aplicable en esta situación será nula o indefinida.
Propiedades:
name
version
Funciones:
getName()
Obtener el nombre de la vista web
getVersion()
Obtener la versión de la vista web
toString()
Obtenga una representación legible por humanos de la vista web
Un objeto de la clase WhichBrowserModelVersion
se utiliza para la propiedad version
del browser
, engine
y objeto os
y contiene una serie de propiedades y funciones. Si una propiedad no es aplicable en esta situación será nula o indefinida.
Propiedades:
value
alias
nickname
details
Funciones:
is($version)
o is($comparison, $version)
Con esta función es fácil comparar una versión con otra. Si especifica solo un argumento, esta función regresará si las versiones son las mismas. También puede especificar dos argumentos; en ese caso, el primer argumento contiene el operador de comparación, como <
, <=
, =
, =>
o >
. El segundo argumento es la versión con la que desea compararlo. Puedes usar versiones como 10
, 10.7
o '10.7.4'
, pero ten en cuenta que 10
no es lo mismo que 10.0
. Por ejemplo, si nuestra versión de sistema operativo es 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