これは非常に複雑で、ほぼ完全に役に立たないブラウザ スニッフィング ライブラリです。ブラウザスニッフィングを使用すべきではないため、役に立ちません。したがって、今すぐやめて、代わりに特徴検出について読んでください。私は真剣です。どこかに行って。後でお礼を言いますね。
サーバーで使用するための WhichBrowser の PHP バージョン。 PHP 8 を含む PHP 7.0 以降と完全な互換性があります。
以下もご利用いただけます:
どのブラウザ/パーサー - JavaScript
サーバー上のNode.jsで使用するためのWhichBrowserのJavaScriptバージョン
どのブラウザ/サーバーか
ブラウザで使用する JavaScript API を提供する PHP で書かれたサーバー
しかし、なぜほぼ完全に役に立たず、まったく役に立たないわけではないのでしょうか?まあ、ルールには常に例外があります。ブラウザー スニッフィングを行う正当な理由は、ユーザー エクスペリエンスを向上させるため、または Web サイトでどのブラウザーが使用されているかに関する情報を収集するためです。私の Web サイトは html5test.com で、どのスコアがどのブラウザに属するかを知りたかったのです。そのためには、ブラウザのスニッフィング ライブラリが必要です。
なぜ非常に複雑なのでしょうか?
みんな嘘をつくから。真剣な話、完全に真実なブラウザは 1 つもありません。ほとんどすべてのブラウザは Netscape 5 であると主張し、ほぼすべての WebKit ブラウザは Gecko に基づいていると主張します。 Internet Explorer 11 でさえ、もはや IE であるとはまったく主張しておらず、代わりに Gecko のような名前のないブラウザーになっています。そして事態はさらに悪化します。だからこそ複雑なのです。
どのような情報が得られますか?ブラウザ、レンダリング エンジン、OS、デバイスに関する情報を含む優れたオブジェクトが得られます。名前とバージョン、さらにはデバイスのメーカーとモデルも表示されます。そして、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 ヘッダーは Linux 上の Opera 11.10 のように見えますが、それが Opera Mini であることがわかります。他のヘッダーから実際のオペレーティング システムとデバイス モデルを把握することもできます。
WhichBrowser には PHP 7.0 以降が必要で、PHP 8 をサポートしています。WhichBrowser は PSR-4 自動ロード標準と互換性があり、PSR-1 および PSR-2 コーディング スタイルに従います。
PHP の標準パッケージ マネージャーである Composer を使用して、WhichBrowser をインストールできます。パッケージはwhichbrowser/parser
と呼ばれます。
composer require whichbrowser/parser
簡単なコマンドを実行するだけで、WhichBrowser を簡単に更新できます。
composer update whichbrowser/parser
このコマンドはできるだけ頻繁に実行する必要があります。この目的のために cron ジョブを設定することを検討することもできます。
最初のステップでは Composer オートローダーが必要です。
<?php
require ' vendor/autoload.php ' ;
2 番目のステップは、新しい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
もう 1 つの方法は、オブジェクトをクエリすることです。
$ 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
オブジェクトの作成時に 2 番目のパラメーターとして配列を渡すことで、追加のオプションを設定できます。
場合によっては、ボットの検出を無効にすることが必要になる場合があります。これにより、ボットが WhichBrowser を意図的にだますことができるため、ボットが模倣しようとしているユーザーエージェントの ID を特定できます。これは、WhichBrowser を使用して Web サイトのさまざまなバリアントを切り替え、クローラーが Web サイトの適切なバリアントを確実に認識できるようにする場合に特に便利です。たとえば、モバイル デバイスを模倣するボットには、サイトのモバイル版が表示されます。
$ result = new WhichBrowser Parser ( getallheaders (), [ ' detectBots ' => false ]);
WhichBrowser は、リクエスト間で結果をキャッシュするための PSR-6 互換キャッシュ アダプターをサポートします。キャッシュの使用は、Web サイトのすべてのページで WhichBrowser を使用し、ユーザーが複数のページにアクセスする場合に特に便利です。最初の訪問時にヘッダーが解析され、結果がキャッシュされます。さらにアクセスすると、キャッシュされた結果が使用されるため、ヘッダーを何度も解析するよりもはるかに高速です。
APC、Doctrine、Memcached、MongoDB、Redis など、他のタイプのキャッシュに使用できるアダプターがあります。これらのアダプターの構成はすべて互いに異なりますが、一度構成したら、 Parser
オブジェクトの作成時にそれをオプションとして渡すか、後でsetCache()
関数を使用して設定するだけです。 WhichBrowser は、PHP キャッシュによって提供されるアダプターで動作することがテストされています。アダプターを提供する他のパッケージのリストについては、Packagist を参照してください。
たとえば、memcached ベースのキャッシュを有効にしたい場合は、追加の Composer パッケージをインストールする必要があります。
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
オプションを設定するか、2 番目のパラメーターとしてsetCache()
関数に渡します。
新しいWhichBrowserParser
オブジェクトが作成されると、そのオブジェクトには多数のプロパティと関数が含まれます。これらのプロパティはすべて存在することが保証されています。
プロパティ:
browser
engine
os
device
機能:
getType()
device
オブジェクトのtype
とsubtype
プロパティを返します。サブタイプが存在する場合は、そのタイプに連結され、半色で区切られます (例: mobile:smart
またはgaming:portable
)。サブタイプが適用できない場合は、タイプ (たとえば、 desktop
またはereader
のみが返されます。
isType($type [,$type [,$type [,$type]]])
単一の引数が使用される場合、引数がdevice
オブジェクトのtype
プロパティと一致する場合、関数はtrue
を返します。オプションで、引数をタイプに連結し、セミコロンで区切ることにより、サブタイプを指定することもできます。複数の引数を使用できます。その場合、引数の 1 つが一致すると関数はtrue
返します。どの引数も一致しない場合はfalse
を返します
isMobile()
ブラウザが携帯電話、タブレット、電子書籍リーダー、カメラ、ポータブル メディア プレーヤー、時計、ポータブル ゲーム コンソールなどのモバイル デバイスの場合はtrue
を返します。それ以外の場合はfalse
を返します。
isBrowser($name [, $comparison, $version])
browser
オブジェクトのname
とversion
プロパティをクエリするために使用されます。この関数には、 name
に基づく単純な比較を行う 1 つの引数、またはname
とversion
両方を比較する 3 つの引数を含めることができます。最初の引数には常にブラウザの名前が含まれます。 2 番目の引数は、 <
、 <=
、 =
、 =>
または>
のいずれかを含む文字列です。 3 番目は、バージョンを含む整数、浮動小数点数、または文字列です。 10
、 10.7
、 '10.7.4'
などのバージョンを使用できます。バージョン比較の実行方法の詳細については、 Version
オブジェクトのis()
関数を参照してください。
isEngine($name [, $comparison, $version])
engine
オブジェクトのname
とversion
プロパティをクエリするために使用されます。この関数はisBrowser
とまったく同じように機能します。
isOs($name [, $comparison, $version])
os
オブジェクトのname
とversion
プロパティをクエリするために使用されます。この関数はisBrowser
とまったく同じように動作します。
isDetected()
実際に何らかのブラウザが検出されたのでしょうか、それとも何も検出できなかったのでしょうか?
toString()
オペレーティング システムやデバイスの情報を含む、検出されたブラウザーを人間が判読できる形式で取得します。
WhichBrowserModelBrowser
クラスのオブジェクトは、メインのWhichBrowserParser
オブジェクトのbrowser
プロパティとして使用され、多数のプロパティが含まれています。この状況でプロパティが適用できない場合、そのプロパティは null または未定義になります。
プロパティ:
name
alias
version
stock
channel
mode
hidden
family
using
機能:
isFamily($name)
このブラウザのファミリーがこの名前を持っているのか、それともブラウザ自体がこの名前を持っているのか。
isUsing($name)
ブラウザは、指定された名前で Web ビューを使用しています。
getName()
ブラウザの名前を取得する
getVersion()
ブラウザのバージョンを取得する
toString()
検出されたブラウザを人間が判読できる形式で取得します
WhichBrowserModelEngine
クラスのオブジェクトは、メインのWhichBrowserParser
オブジェクトのengine
プロパティに使用され、多数のプロパティが含まれています。この状況でプロパティが適用できない場合、そのプロパティは null または未定義になります。
プロパティ:
name
version
機能:
getName()
レンダリング エンジンの名前を取得します
getVersion()
レンダリング エンジンのバージョンを取得する
toString()
検出されたレンダリング エンジンを人間が判読できる形式で取得します。
WhichBrowserModelOs
クラスのオブジェクトは、メインのWhichBrowserParser
オブジェクトのos
プロパティとして使用され、多数のプロパティが含まれています。この状況でプロパティが適用できない場合、そのプロパティは null または未定義になります。
プロパティ:
name
version
family
機能:
isFamily($name)
このオペレーティング システムのファミリーにこの名前が付いているのでしょうか、それともオペレーティング システム自体にこの名前が付いているのでしょうか。
getName()
オペレーティング システムの名前を取得する
getVersion()
オペレーティング システムのバージョンを取得する
toString()
検出されたオペレーティング システムを人間が判読できる形式で取得します。
WhichBrowserModelDevice
クラスのオブジェクトは、メインのWhichBrowserParser
オブジェクトのdevice
プロパティに使用され、多数のプロパティが含まれています。この状況でプロパティが適用できない場合、そのプロパティは null または未定義になります。
プロパティ:
type
subtype
identified
manufacturer
model
type
プロパティには、次のリストの任意の値を含めることができます。
type
が「モバイル」の場合、 subtype
プロパティには次のリストの任意の値を含めることができます。
type
が「ゲーム」の場合、 subtype
プロパティには次のリストの任意の値を含めることができます。
機能:
getManufacturer()
メーカー名を取得する
getModel()
モデルの名前を取得する
toString()
検出されたデバイスを人間が判読できる形式で取得します
WhichBrowserModelFamily
クラスのオブジェクトはWhichBrowserModelBrowser
およびWhichBrowserModelOs
オブジェクトのfamily
プロパティに使用され、多数のプロパティが含まれています。この状況でプロパティが適用できない場合、そのプロパティは null または未定義になります。
プロパティ:
name
version
機能:
getName()
家族の名前を取得する
getVersion()
ファミリのバージョンを取得する
toString()
人間が判読できる家族の表現を取得する
WhichBrowserModelUsing
クラスのオブジェクトは、 WhichBrowserModelBrowser
オブジェクトのusing
プロパティに使用され、多数のプロパティが含まれています。この状況でプロパティが適用できない場合、そのプロパティは null または未定義になります。
プロパティ:
name
version
機能:
getName()
Webビューの名前を取得します
getVersion()
WebViewのバージョンを取得する
toString()
人間が判読できる Web ビューの表現を取得します。
WhichBrowserModelVersion
クラスのオブジェクトは、 browser
、 engine
、 os
オブジェクトのversion
プロパティに使用され、多数のプロパティと関数が含まれています。この状況でプロパティが適用できない場合、そのプロパティは null または未定義になります。
プロパティ:
value
alias
nickname
details
機能:
is($version)
またはis($comparison, $version)
この機能を使用すると、あるバージョンを別のバージョンと簡単に比較できます。引数を 1 つだけ指定した場合、この関数はバージョンが同じであれば戻ります。 2 つの引数を指定することもできます。その場合、最初の引数には、 <
、 <=
、 =
、 =>
、 >
などの比較演算子が含まれます。 2 番目の引数は、比較するバージョンです。 10
、 10.7
、 '10.7.4'
などのバージョンを使用できますが、 10
10.0
と同じではないことに注意してください。たとえば、OS バージョンが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