Dies ist eine äußerst komplizierte und fast völlig nutzlose Browser-Sniffing-Bibliothek. Nutzlos, da Sie kein Browser-Sniffing verwenden sollten. Hören Sie also sofort auf und lesen Sie stattdessen etwas über die Feature-Erkennung. Ich meine es ernst. Geh weg. Du wirst mir später danken.
Die PHP-Version von WhichBrowser zur Verwendung auf einem Server. Vollständig kompatibel mit PHP 7.0 oder höher, einschließlich PHP 8.
Auch erhältlich:
Welcher Browser/Parser-JavaScript
Eine JavaScript-Version von WhichBrowser zur Verwendung mit Node.js auf dem Server
Welcher Browser/Server
Ein in PHP geschriebener Server, der eine JavaScript-API zur Verwendung im Browser bereitstellt
Aber warum fast völlig nutzlos und nicht völlig nutzlos? Nun, es gibt immer eine Ausnahme von der Regel. Es gibt triftige Gründe, Browser-Sniffing durchzuführen: um das Benutzererlebnis zu verbessern oder Informationen darüber zu sammeln, welche Browser auf Ihrer Website verwendet werden. Meine Website ist html5test.com und ich wollte wissen, welcher Score zu welchem Browser gehört. Und dazu benötigen Sie eine Browser-Sniffing-Bibliothek.
Warum ist es extrem kompliziert?
Weil jeder lügt. Im Ernst, es gibt keinen einzigen Browser, der völlig wahrheitsgetreu ist. Fast alle Browser geben an, dass sie Netscape 5 sind und fast alle WebKit-Browser geben an, dass sie auf Gecko basieren. Sogar der Internet Explorer 11 gibt mittlerweile nicht mehr vor, überhaupt ein IE zu sein, sondern ein namenloser Browser, der Gecko ähnelt. Und es wird schlimmer. Deshalb ist es kompliziert.
Welche Art von Informationen gibt es? Sie erhalten ein schönes Objekt, das Informationen über den Browser, die Rendering-Engine, das Betriebssystem und das Gerät enthält. Sie erhalten Namen und Versionen sowie sogar Gerätehersteller und -modell. Und WhichBrowser ist ziemlich hartnäckig. Es gibt Ihnen Informationen, die andere nicht haben. Zum Beispiel:
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 wird nie erwähnt
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
Obwohl im Useragent-Header behauptet wird, es handele sich um ein Series40-Gerät, wissen wir, dass es tatsächlich die Asha-Plattform ausführt, und wir wissen auch, dass OviBrowser in Nokia Xpress umbenannt wurde.
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
Der Useragent-Header sieht aus wie Opera 11.10 unter Linux, aber wir wissen, dass es sich um Opera Mini handelt. Aus anderen Headern können wir sogar das tatsächliche Betriebssystem und Gerätemodell ermitteln.
WhichBrowser erfordert PHP 7.0 oder höher und unterstützt PHP 8. WhichBrowser ist mit dem PSR-4-Autoloading-Standard kompatibel und folgt dem PSR-1- und PSR-2-Codierungsstil.
Sie können WhichBrowser mithilfe von Composer installieren – dem Standardpaketmanager für PHP. Das Paket heißt whichbrowser/parser
.
composer require whichbrowser/parser
Sie können WhichBrowser ganz einfach aktualisieren, indem Sie einen einfachen Befehl ausführen.
composer update whichbrowser/parser
Sie sollten diesen Befehl so oft wie möglich ausführen. Vielleicht möchten Sie zu diesem Zweck sogar einen Cronjob einrichten.
Für den ersten Schritt ist der Composer-Autoloader erforderlich:
<?php
require ' vendor/autoload.php ' ;
Der zweite Schritt besteht darin, ein neues WhichBrowserParser
Objekt zu erstellen. Dieses Objekt enthält alle Informationen, die die Bibliothek über den Browser finden konnte. Das Objekt verfügt über einen erforderlichen Parameter, entweder die vom Browser gesendeten Header oder eine Useragent-Zeichenfolge. Die Verwendung der Header ist vorzuziehen, da dies eine bessere Erkennung ermöglicht. Wenn Sie jedoch nur über den Useragent-String verfügen, funktioniert dies auch.
Zum Beispiel:
$ result = new WhichBrowser Parser ( getallheaders ());
oder:
$ result = new WhichBrowser Parser ( $ _SERVER [ ' HTTP_USER_AGENT ' ]);
Die Variable $result
enthält nun ein Objekt, das Sie nach Informationen abfragen können. Es gibt verschiedene Möglichkeiten, auf die Informationen zuzugreifen.
Zunächst können Sie die Funktion toString()
aufrufen, um eine für Menschen lesbare Identifikation zu erhalten:
" You are using " . $ result -> toString ();
// You are using Chrome 27 on OS X Mountain Lion 10.8
Eine andere Möglichkeit besteht darin, das Objekt abzufragen:
$ 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
Sie können auch direkt auf diese Eigenschaften zugreifen:
$ result -> browser -> toString ();
// Chrome 27
$ result -> engine -> toString ();
// Blink
$ result -> os -> toString ();
// OS X Mountain Lion 10.8
Oder greifen Sie direkt auf Teile dieser Eigenschaften zu:
$ 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
Schließlich können Sie Versionen auch direkt abfragen:
$ result -> browser -> version -> is ( ' > ' , 26 );
// true
$ result -> os -> version -> is ( ' < ' , ' 10.7.4 ' );
// false
Es ist möglich, zusätzliche Optionen festzulegen, indem beim Erstellen des Parser
-Objekts ein Array als zweiter Parameter übergeben wird.
In manchen Fällen möchten Sie möglicherweise die Erkennung von Bots deaktivieren. Dies ermöglicht es dem Bot, WhichBrowser absichtlich zu täuschen, sodass Sie die Identität des Benutzeragenten ermitteln können, den der Bot nachzuahmen versucht. Dies ist besonders praktisch, wenn Sie WhichBrowser verwenden möchten, um zwischen verschiedenen Varianten Ihrer Website zu wechseln und sicherstellen möchten, dass Crawler die richtige Variante der Website sehen. Beispielsweise sieht ein Bot, der ein mobiles Gerät nachahmt, die mobile Variante Ihrer Website.
$ result = new WhichBrowser Parser ( getallheaders (), [ ' detectBots ' => false ]);
WhichBrowser unterstützt PSR-6-kompatible Cache-Adapter zum Zwischenspeichern von Ergebnissen zwischen Anfragen. Die Verwendung eines Caches ist besonders nützlich, wenn Sie WhichBrowser auf jeder Seite Ihrer Website verwenden und ein Benutzer mehrere Seiten besucht. Beim ersten Besuch werden die Header geparst und das Ergebnis zwischengespeichert. Bei weiteren Besuchen werden die zwischengespeicherten Ergebnisse verwendet, was viel schneller ist, als die Header immer wieder analysieren zu müssen.
Es sind Adapter für andere Cache-Typen verfügbar, beispielsweise APC, Doctrine, Memcached, MongoDB, Redis und viele mehr. Die Konfiguration dieser Adapter unterscheidet sich alle voneinander, aber sobald sie konfiguriert sind, müssen Sie sie nur noch als Option beim Erstellen des Parser
-Objekts übergeben oder sie anschließend mit der Funktion setCache()
festlegen. WhichBrowser wurde auf die Zusammenarbeit mit den von PHP Cache bereitgestellten Adaptern getestet. Eine Liste anderer Pakete, die Adapter bereitstellen, finden Sie unter Packagist.
Wenn Sie beispielsweise einen Memcached-basierten Cache aktivieren möchten, müssen Sie ein zusätzliches Composer-Paket installieren:
composer require cache/memcached-adapter
Und ändern Sie den Aufruf an WhichBrowser/Parser wie folgt:
$ client = new Memcached ();
$ client -> addServer ( ' localhost ' , 11211 );
$ pool = new Cache Adapter Memcached MemcachedCachePool ( $ client );
$ result = new WhichBrowser Parser ( getallheaders (), [ ' cache ' => $ pool ]);
oder
$ client = new Memcached ();
$ client -> addServer ( ' localhost ' , 11211 );
$ pool = new Cache Adapter Memcached MemcachedCachePool ( $ client );
$ result = new WhichBrowser Parser ();
$ result -> setCache ( $ pool );
$ result -> analyse ( getallheaders ());
Sie können auch festlegen, nach wie vielen Sekunden ein zwischengespeichertes Ergebnis verworfen werden soll. Der Standardwert beträgt 900 Sekunden oder 15 Minuten. Wenn Sie der Meinung sind, dass WhichBrowser zu viel Speicher für das Caching benötigt, sollten Sie diesen Wert verringern. Sie können dies tun, indem Sie die Option cacheExpires
festlegen oder sie als zweiten Parameter an die Funktion setCache()
übergeben.
Nachdem ein neues WhichBrowserParser
Objekt erstellt wurde, enthält es eine Reihe von Eigenschaften und Funktionen. Alle diese Eigenschaften sind garantiert vorhanden.
Eigenschaften:
browser
engine
os
device
Funktionen:
getType()
Gibt die type
und subtype
Eigenschaft des device
zurück. Wenn ein Untertyp vorhanden ist, wird er mit dem Typ verkettet und durch eine Halbfarbe getrennt, zum Beispiel: mobile:smart
oder gaming:portable
. Wenn der Untertyp nicht anwendbar ist, wird einfach der Typ zurückgegeben, zum Beispiel: desktop
oder ereader
.
isType($type [,$type [,$type [,$type]]])
Wenn ein einzelnes Argument verwendet wird, gibt die Funktion true
zurück, wenn das Argument mit der type
des device
übereinstimmt. Das Argument kann optional auch einen Subtyp bereitstellen, indem es mit dem Typ verkettet und durch ein Semikolon getrennt wird. Es können mehrere Argumente verwendet werden. In diesem Fall gibt die Funktion true
zurück, wenn eines der Argumente übereinstimmt. Wenn keines der Argumente übereinstimmt, wird false
zurückgegeben
isMobile()
Gibt true
zurück, wenn der Browser ein mobiles Gerät ist, z. B. ein Telefon, Tablet, E-Reader, eine Kamera, ein tragbarer Mediaplayer, eine Uhr oder eine tragbare Spielekonsole. Andernfalls wird false
zurückgegeben.
isBrowser($name [, $comparison, $version])
Wird verwendet, um den name
und version
des browser
abzufragen. Die Funktion kann ein einzelnes Argument für einen einfachen Vergleich basierend auf name
oder drei Argumente für den Vergleich von name
und version
enthalten. Das erste Argument enthält immer den Namen des Browsers. Das zweite Argument ist eine Zeichenfolge, die entweder <
, <=
, =
, =>
oder >
enthalten kann. Der dritte ist eine Ganzzahl, eine Gleitkommazahl oder ein String, der die Version enthält. Sie können Versionen wie 10
, 10.7
oder '10.7.4'
verwenden. Weitere Informationen zur Durchführung von Versionsvergleichen finden Sie in der Funktion is()
des Version
Objekts.
isEngine($name [, $comparison, $version])
Wird verwendet, um den name
und version
des engine
Objekts abzufragen. Diese Funktion funktioniert genauso wie isBrowser
.
isOs($name [, $comparison, $version])
Wird verwendet, um den name
und version
des os
abzufragen. Diese Funktion funktioniert genauso wie isBrowser
.
isDetected()
Wurde tatsächlich ein Browser erkannt oder konnten wir nichts erkennen?
toString()
Erhalten Sie eine für Menschen lesbare Darstellung des erkannten Browsers, einschließlich Betriebssystem- und Geräteinformationen.
Ein Objekt der Klasse WhichBrowserModelBrowser
wird für die browser
des Hauptobjekts WhichBrowserParser
verwendet und enthält eine Reihe von Eigenschaften. Wenn eine Eigenschaft in dieser Situation nicht anwendbar ist, ist sie null oder undefiniert.
Eigenschaften:
name
alias
version
stock
channel
mode
hidden
family
using
Funktionen:
isFamily($name)
Hat die Familie dieses Browsers diesen Namen oder hat der Browser selbst diesen Namen?
isUsing($name)
Verwendet der Browser eine Webansicht mit dem angegebenen Namen?
getName()
Rufen Sie den Namen des Browsers ab
getVersion()
Rufen Sie die Version des Browsers ab
toString()
Erhalten Sie eine für Menschen lesbare Darstellung des erkannten Browsers
Ein Objekt der Klasse WhichBrowserModelEngine
wird für die engine
Eigenschaft des Hauptobjekts WhichBrowserParser
verwendet und enthält eine Reihe von Eigenschaften. Wenn eine Eigenschaft in dieser Situation nicht anwendbar ist, ist sie null oder undefiniert.
Eigenschaften:
name
version
Funktionen:
getName()
Rufen Sie den Namen der Rendering-Engine ab
getVersion()
Rufen Sie die Version der Rendering-Engine ab
toString()
Erhalten Sie eine für Menschen lesbare Darstellung der erkannten Rendering-Engine
Ein Objekt der Klasse WhichBrowserModelOs
wird für die os
-Eigenschaft des Hauptobjekts WhichBrowserParser
verwendet und enthält eine Reihe von Eigenschaften. Wenn eine Eigenschaft in dieser Situation nicht anwendbar ist, ist sie null oder undefiniert.
Eigenschaften:
name
version
family
Funktionen:
isFamily($name)
Hat die Familie dieses Betriebssystems diesen Namen oder hat das Betriebssystem selbst diesen Namen?
getName()
Rufen Sie den Namen des Betriebssystems ab
getVersion()
Rufen Sie die Version des Betriebssystems ab
toString()
Erhalten Sie eine für Menschen lesbare Darstellung des erkannten Betriebssystems
Ein Objekt der Klasse WhichBrowserModelDevice
wird für die device
des Hauptobjekts WhichBrowserParser
verwendet und enthält eine Reihe von Eigenschaften. Wenn eine Eigenschaft in dieser Situation nicht anwendbar ist, ist sie null oder undefiniert.
Eigenschaften:
type
subtype
identified
manufacturer
model
Die type
Eigenschaft kann einen beliebigen Wert aus der folgenden Liste enthalten:
Wenn der type
„mobile“ ist, kann die subtype
-Eigenschaft einen beliebigen Wert aus der folgenden Liste enthalten:
Wenn der type
„Gaming“ ist, kann die subtype
-Eigenschaft einen beliebigen Wert aus der folgenden Liste enthalten:
Funktionen:
getManufacturer()
Ermitteln Sie den Namen des Herstellers
getModel()
Ermitteln Sie den Namen des Modells
toString()
Erhalten Sie eine für Menschen lesbare Darstellung des erkannten Geräts
Ein Objekt der Klasse WhichBrowserModelFamily
wird für die family
der Objekte WhichBrowserModelBrowser
und WhichBrowserModelOs
verwendet und enthält eine Reihe von Eigenschaften. Wenn eine Eigenschaft in dieser Situation nicht anwendbar ist, ist sie null oder undefiniert.
Eigenschaften:
name
version
Funktionen:
getName()
Holen Sie sich den Namen der Familie
getVersion()
Holen Sie sich die Version der Familie
toString()
Erhalten Sie eine für Menschen lesbare Darstellung der Familie
Ein Objekt der Klasse WhichBrowserModelUsing
wird für die using
Eigenschaft des WhichBrowserModelBrowser
Objekts verwendet und enthält eine Reihe von Eigenschaften. Wenn eine Eigenschaft in dieser Situation nicht anwendbar ist, ist sie null oder undefiniert.
Eigenschaften:
name
version
Funktionen:
getName()
Rufen Sie den Namen der Webansicht ab
getVersion()
Rufen Sie die Version der Webansicht ab
toString()
Erhalten Sie eine für Menschen lesbare Darstellung der Webansicht
Ein Objekt der Klasse WhichBrowserModelVersion
wird für die version
des browser
, engine
und os
verwendet und enthält eine Reihe von Eigenschaften und Funktionen. Wenn eine Eigenschaft in dieser Situation nicht anwendbar ist, ist sie null oder undefiniert.
Eigenschaften:
value
alias
nickname
details
Funktionen:
is($version)
oder is($comparison, $version)
Mit dieser Funktion ist es einfach, eine Version mit einer anderen Version zu vergleichen. Wenn Sie nur ein Argument angeben, gibt diese Funktion zurück, wenn die Versionen gleich sind. Sie können auch zwei Argumente angeben. In diesem Fall enthält das erste Argument den Vergleichsoperator, z. B. <
, <=
, =
, =>
oder >
. Das zweite Argument ist die Version, mit der Sie es vergleichen möchten. Sie können Versionen wie 10
, 10.7
oder '10.7.4'
verwenden. Beachten Sie jedoch, dass 10
nicht mit 10.0
identisch ist. Wenn unsere Betriebssystemversion beispielsweise 10.7.4
ist:
$ 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