Il s'agit d'une bibliothèque de détection de navigateur extrêmement compliquée et presque totalement inutile. Inutile car vous ne devriez pas utiliser le reniflage du navigateur. Alors arrêtez-vous maintenant et allez plutôt lire quelque chose sur la détection de fonctionnalités. Je suis sérieux. S'en aller. Tu me remercieras plus tard.
La version PHP de WhichBrowser à utiliser sur un serveur. Entièrement compatible avec PHP 7.0 ou supérieur, y compris PHP 8.
Également disponible :
Quel navigateur/analyseur-JavaScript
Une version JavaScript de WhichBrowser à utiliser avec Node.js sur le serveur
Quel navigateur/serveur
Un serveur écrit en PHP qui fournit une API JavaScript à utiliser dans le navigateur
Mais pourquoi presque complètement inutile et pas complètement inutile ? Eh bien, il y a toujours une exception à la règle. Il existe des raisons valables de renifler le navigateur : pour améliorer l'expérience utilisateur ou pour recueillir des informations sur les navigateurs utilisés sur votre site Web. Mon site Web est html5test.com et je voulais savoir quel score appartient à quel navigateur. Et pour ce faire, vous avez besoin d’une bibliothèque de détection de navigateur.
Pourquoi est-ce extrêmement compliqué ?
Parce que tout le monde ment. Sérieusement, il n’existe pas un seul navigateur qui soit totalement véridique. Presque tous les navigateurs disent qu'il s'agit de Netscape 5 et presque tous les navigateurs WebKit disent qu'ils sont basés sur Gecko. Même Internet Explorer 11 ne prétend plus du tout être IE, mais plutôt un navigateur sans nom qui ressemble à Gecko. Et c'est encore pire. C'est pour cela que c'est compliqué.
Quel genre d’informations donne-t-il ? Vous obtenez un bel objet contenant des informations sur le navigateur, le moteur de rendu, le système d'exploitation et l'appareil. Il vous donne les noms et les versions et même le fabricant et le modèle de l'appareil. Et WhichBrowser est assez tenace. Cela vous donne des informations que d'autres n'ont pas. Par exemple:
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 n'est jamais mentionné
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
Bien que l'en-tête de l'agent utilisateur prétende être un appareil Series40, nous savons qu'il exécute en fait la plate-forme Asha et nous savons également qu'OviBrowser a été renommé 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
L'en-tête de l'agent utilisateur ressemble à Opera 11.10 sous Linux, mais nous savons qu'il s'agit d'Opera Mini. Nous pouvons même déterminer le véritable système d'exploitation et le modèle de périphérique à partir d'autres en-têtes.
WhichBrowser nécessite PHP 7.0 ou supérieur et prend en charge PHP 8. WhichBrowser est compatible avec la norme de chargement automatique PSR-4 et suit le style de codage PSR-1 et PSR-2.
Vous pouvez installer WhichBrowser en utilisant Composer - le gestionnaire de packages standard pour PHP. Le package s'appelle whichbrowser/parser
.
composer require whichbrowser/parser
Vous pouvez facilement mettre à jour WhichBrowser en exécutant une simple commande.
composer update whichbrowser/parser
Vous devez exécuter cette commande aussi souvent que possible. Vous pourriez même envisager de créer une tâche cron à cet effet.
La première étape nécessite le chargeur automatique Composer :
<?php
require ' vendor/autoload.php ' ;
La deuxième étape consiste à créer un nouvel objet WhichBrowserParser
. Cet objet contiendra toutes les informations que la bibliothèque pourra trouver sur le navigateur. L'objet a un paramètre obligatoire, soit les en-têtes envoyés par le navigateur, soit une chaîne d'agent utilisateur. Utiliser les en-têtes est préférable, car cela permettra une meilleure détection, mais si vous n'avez que la chaîne useragent, cela fonctionnera également.
Par exemple:
$ result = new WhichBrowser Parser ( getallheaders ());
ou:
$ result = new WhichBrowser Parser ( $ _SERVER [ ' HTTP_USER_AGENT ' ]);
La variable $result
contient désormais un objet que vous pouvez interroger pour obtenir des informations. Il existe différentes manières d'accéder aux informations.
Tout d’abord, vous pouvez appeler la fonction toString()
pour obtenir une identification lisible par l’homme :
" You are using " . $ result -> toString ();
// You are using Chrome 27 on OS X Mountain Lion 10.8
Une autre possibilité est d'interroger l'objet :
$ 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
Vous pouvez également accéder directement à ces propriétés :
$ result -> browser -> toString ();
// Chrome 27
$ result -> engine -> toString ();
// Blink
$ result -> os -> toString ();
// OS X Mountain Lion 10.8
Ou accédez directement à certaines parties de ces propriétés :
$ 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
Enfin, vous pouvez également interroger directement les versions :
$ result -> browser -> version -> is ( ' > ' , 26 );
// true
$ result -> os -> version -> is ( ' < ' , ' 10.7.4 ' );
// false
Il est possible de définir des options supplémentaires en passant un tableau comme deuxième paramètre lors de la création de l'objet Parser
.
Dans certains cas, vous souhaiterez peut-être désactiver la détection des robots. Cela permet au bot de tromper délibérément WhichBrowser, afin que vous puissiez récupérer l'identité de l'agent utilisateur que le bot essaie d'imiter. Ceci est particulièrement pratique lorsque vous souhaitez utiliser WhichBrowser pour basculer entre différentes variantes de votre site Web et que vous souhaitez vous assurer que les robots voient la bonne variante du site Web. Par exemple, un robot qui imite un appareil mobile verra la variante mobile de votre site.
$ result = new WhichBrowser Parser ( getallheaders (), [ ' detectBots ' => false ]);
WhichBrowser prend en charge les adaptateurs de cache compatibles PSR-6 pour la mise en cache des résultats entre les requêtes. L'utilisation d'un cache est particulièrement utile si vous utilisez WhichBrowser sur chaque page de votre site Web et qu'un utilisateur visite plusieurs pages. Lors de la première visite, les en-têtes seront analysés et le résultat sera mis en cache. Lors de visites ultérieures, les résultats mis en cache seront utilisés, ce qui est beaucoup plus rapide que de devoir analyser les en-têtes encore et encore.
Il existe des adaptateurs disponibles pour d'autres types de caches, tels que APC, Doctrine, Memcached, MongoDB, Redis et bien d'autres. La configuration de ces adaptateurs diffère toutes les unes des autres, mais une fois configurée, il suffit de la passer en option lors de la création de l'objet Parser
, ou d'utiliser la fonction setCache()
pour la définir par la suite. WhichBrowser a été testé pour fonctionner avec les adaptateurs fournis par PHP Cache. Pour obtenir la liste des autres packages fournissant des adaptateurs, consultez Packagist.
Par exemple, si vous souhaitez activer un cache basé sur Memcached, vous devez installer un package composer supplémentaire :
composer require cache/memcached-adapter
Et modifiez l’appel en WhichBrowser/Parser comme suit :
$ 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 ());
Vous pouvez également spécifier après combien de secondes un résultat mis en cache doit être supprimé. La valeur par défaut est 900 secondes ou 15 minutes. Si vous pensez que WhichBrowser utilise trop de mémoire pour la mise en cache, vous devez réduire cette valeur. Vous pouvez le faire en définissant l'option cacheExpires
ou en la passant comme deuxième paramètre à la fonction setCache()
.
Une fois qu'un nouvel objet WhichBrowserParser
est créé, il contient un certain nombre de propriétés et de fonctions. Toutes ces propriétés sont garanties d'être présentes.
Propriétés:
browser
engine
os
device
Fonctions :
getType()
Renvoie la propriété type
et subtype
de l’objet device
. Si un sous-type est présent, il est concaténé au type et séparé par un demi-couleur, par exemple : mobile:smart
ou gaming:portable
. Si le sous-type n'est pas applicable, il renvoie simplement le type, par exemple : desktop
ou ereader
.
isType($type [,$type [,$type [,$type]]])
Si un seul argument est utilisé, la fonction renvoie true
si l'argument correspond à la propriété type
de l'objet device
. L'argument peut éventuellement également fournir un sous-type en le concaténant au type et en le séparant par un point-virgule. Elle peut utiliser plusieurs arguments, auquel cas la fonction renvoie true
si l'un des arguments correspond. Si aucun des arguments ne correspond, il renvoie false
isMobile()
Renvoie true
si le navigateur est un appareil mobile, comme un téléphone, une tablette, une liseuse, un appareil photo, un lecteur multimédia portable, une montre ou une console de jeu portable. Sinon, il renvoie false
.
isBrowser($name [, $comparison, $version])
Est utilisé pour interroger la propriété name
et version
de l'objet browser
. La fonction peut contenir un seul argument pour une comparaison simple basée sur name
, ou trois arguments pour comparer à la fois name
et version
. Le premier argument contient toujours le nom du navigateur. Le deuxième argument est une chaîne qui peut contenir soit <
, <=
, =
, =>
ou >
. Le troisième est un entier, un flottant ou une chaîne contenant la version. Vous pouvez utiliser des versions comme 10
, 10.7
ou '10.7.4'
. Pour plus d'informations sur la manière dont les comparaisons de versions sont effectuées, veuillez consulter la fonction is()
de l'objet Version
.
isEngine($name [, $comparison, $version])
Est utilisé pour interroger la propriété name
et version
de l’objet engine
. Cette fonction fonctionne exactement de la même manière que isBrowser
.
isOs($name [, $comparison, $version])
Est utilisé pour interroger la propriété name
et version
de l'objet os
. Cette fonction fonctionne exactement de la même manière que isBrowser
.
isDetected()
Y a-t-il réellement un navigateur détecté, ou n'avons-nous rien détecté ?
toString()
Obtenez une représentation lisible par l’homme du navigateur détecté, y compris les informations sur le système d’exploitation et l’appareil.
Un objet de la classe WhichBrowserModelBrowser
est utilisé pour la propriété browser
de l'objet principal WhichBrowserParser
et contient un certain nombre de propriétés. Si une propriété n'est pas applicable dans cette situation, elle sera nulle ou indéfinie.
Propriétés:
name
alias
version
stock
channel
mode
hidden
family
using
Fonctions :
isFamily($name)
La famille de ce navigateur porte-t-elle ce nom, ou le navigateur lui-même porte-t-il ce nom.
isUsing($name)
Le navigateur utilise-t-il une vue Web portant le nom fourni.
getName()
Obtenez le nom du navigateur
getVersion()
Obtenez la version du navigateur
toString()
Obtenez une représentation lisible par l'homme du navigateur détecté
Un objet de la classe WhichBrowserModelEngine
est utilisé pour la propriété engine
de l'objet principal WhichBrowserParser
et contient un certain nombre de propriétés. Si une propriété n'est pas applicable dans cette situation, elle sera nulle ou indéfinie.
Propriétés:
name
version
Fonctions :
getName()
Obtenez le nom du moteur de rendu
getVersion()
Obtenir la version du moteur de rendu
toString()
Obtenez une représentation lisible par l'homme du moteur de rendu détecté
Un objet de la classe WhichBrowserModelOs
est utilisé pour la propriété os
de l'objet principal WhichBrowserParser
et contient un certain nombre de propriétés. Si une propriété n'est pas applicable dans cette situation, elle sera nulle ou indéfinie.
Propriétés:
name
version
family
Fonctions :
isFamily($name)
La famille de ce système d'exploitation porte-t-elle ce nom ou le système d'exploitation lui-même porte-t-il ce nom.
getName()
Obtenir le nom du système d'exploitation
getVersion()
Obtenir la version du système d'exploitation
toString()
Obtenez une représentation lisible par l'homme du système d'exploitation détecté
Un objet de la classe WhichBrowserModelDevice
est utilisé pour la propriété device
de l'objet principal WhichBrowserParser
et contient un certain nombre de propriétés. Si une propriété n'est pas applicable dans cette situation, elle sera nulle ou indéfinie.
Propriétés:
type
subtype
identified
manufacturer
model
La propriété type
peut contenir n'importe quelle valeur de la liste suivante :
Si le type
est « mobile », la propriété subtype
peut contenir n’importe quelle valeur de la liste suivante :
Si le type
est « gaming », la propriété subtype
peut contenir n'importe quelle valeur de la liste suivante :
Fonctions :
getManufacturer()
Obtenez le nom du fabricant
getModel()
Obtenez le nom du modèle
toString()
Obtenez une représentation lisible par l'homme de l'appareil détecté
Un objet de la classe WhichBrowserModelFamily
est utilisé pour la propriété family
des objets WhichBrowserModelBrowser
et WhichBrowserModelOs
et contient un certain nombre de propriétés. Si une propriété n'est pas applicable dans cette situation, elle sera nulle ou indéfinie.
Propriétés:
name
version
Fonctions :
getName()
Obtenez le nom de la famille
getVersion()
Obtenez la version de la famille
toString()
Obtenez une représentation lisible de la famille
Un objet de la classe WhichBrowserModelUsing
est utilisé pour la propriété using
de l'objet WhichBrowserModelBrowser
et contient un certain nombre de propriétés. Si une propriété n'est pas applicable dans cette situation, elle sera nulle ou indéfinie.
Propriétés:
name
version
Fonctions :
getName()
Obtenez le nom de la vue Web
getVersion()
Obtenir la version de la webview
toString()
Obtenez une représentation lisible par l'homme de la vue Web
Un objet de la classe WhichBrowserModelVersion
est utilisé pour la propriété version
de l'objet browser
, engine
et os
et contient un certain nombre de propriétés et de fonctions. Si une propriété n'est pas applicable dans cette situation, elle sera nulle ou indéfinie.
Propriétés:
value
alias
nickname
details
Fonctions :
is($version)
ou is($comparison, $version)
Grâce à cette fonction, il est facile de comparer une version à une autre version. Si vous spécifiez un seul argument, cette fonction sera renvoyée si les versions sont les mêmes. Vous pouvez également spécifier deux arguments, auquel cas le premier argument contient l'opérateur de comparaison, tel que <
, <=
, =
, =>
ou >
. Le deuxième argument est la version à laquelle vous souhaitez le comparer. Vous pouvez utiliser des versions comme 10
, 10.7
ou '10.7.4'
, mais sachez que 10
n'est pas la même chose que 10.0
. Par exemple si notre version de système d'exploitation est 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