Web開発では、クライアントバージョン情報(ブラウザ、オペレーティングシステム、デバイスタイプなど)の取得は一般的な要件です。統計分析、機能的互換性の判断、またはパーソナライズされたディスプレイに使用されるかどうかにかかわらず、クライアント環境を正確に識別すると、ユーザーエクスペリエンスが大幅に向上する可能性があります。
PHP独自の$ _Server ['http_user_agent']は基本的なクライアント情報を提供しますが、解析するのは簡単ではありません。このタスクをより効率的かつ便利にするために、より強力なget_client_version関数ツールクラスをカプセル化して、ブラウザー、オペレーティングシステム、デバイスタイプ、さらにはアプリバージョンを自動的に識別できます。
元のユーザーエージェント文字列を直接使用すると、次の問題があります。
文字列形式は統一されておらず、解析ルールは複雑です
ブラウザとオペレーティングシステムのバージョンは頻繁に更新され、認識方法はしばしば無効です
柔軟性とスケーラビリティの欠如、マルチ末端のアプリケーションのニーズに対処することは困難です
これらの問題を克服するには、構造化されたモジュール式、拡張可能なツールクラスが必要です。
次の機能を備えたClientSversionHelperクラスを作成する予定です。
ブラウザの種類とバージョン(Chrome、Firefox、Safariなど)を自動的に識別する
オペレーティングシステムとバージョン(Windows、MacOS、Linux、Android、iOS)を自動的に識別する
モバイルデバイスかどうかを判断します
カスタムアプリケーションバージョンヘッダー認識(自己開発アプリのUA形式など)をサポートします
統合された構造の返品形式を提供します
以下は基本的な実装であり、将来のプロジェクトの要件に応じてさらに拡張できます。
<?php
class ClientVersionHelper
{
protected $userAgent;
public function __construct($userAgent = null)
{
$this->userAgent = $userAgent ?: ($_SERVER['HTTP_USER_AGENT'] ?? '');
}
public function getClientInfo()
{
return [
'browser' => $this->getBrowser(),
'os' => $this->getOS(),
'device' => $this->isMobile() ? 'Mobile' : 'Desktop',
'raw' => $this->userAgent,
];
}
protected function getBrowser()
{
$ua = $this->userAgent;
if (preg_match('/Chrome\/([0-9\.]+)/i', $ua, $matches)) {
return 'Chrome ' . $matches[1];
}
if (preg_match('/Firefox\/([0-9\.]+)/i', $ua, $matches)) {
return 'Firefox ' . $matches[1];
}
if (preg_match('/Safari\/([0-9\.]+)/i', $ua) && !preg_match('/Chrome/i', $ua)) {
return 'Safari';
}
if (preg_match('/MSIE ([0-9\.]+)/i', $ua, $matches)) {
return 'Internet Explorer ' . $matches[1];
}
return 'Unknown';
}
protected function getOS()
{
$ua = $this->userAgent;
if (preg_match('/Windows NT ([0-9\.]+)/i', $ua, $matches)) {
return 'Windows ' . $matches[1];
}
if (preg_match('/Mac OS X ([0-9_\.]+)/i', $ua, $matches)) {
return 'macOS ' . str_replace('_', '.', $matches[1]);
}
if (preg_match('/Android ([0-9\.]+)/i', $ua, $matches)) {
return 'Android ' . $matches[1];
}
if (preg_match('/iPhone OS ([0-9_]+)/i', $ua, $matches)) {
return 'iOS ' . str_replace('_', '.', $matches[1]);
}
if (preg_match('/Linux/i', $ua)) {
return 'Linux';
}
return 'Unknown';
}
protected function isMobile()
{
return preg_match('/Mobile|Android|iPhone|iPad/i', $this->userAgent);
}
}
構造化されたクライアントバージョン情報は、単純な通話だけで取得されます。
$clientHelper = new ClientVersionHelper();
$info = $clientHelper->getClientInfo();
echo '<pre>';
print_r($info);
echo '</pre>';
返品結果の例は次のとおりです。
Array
(
[browser] => Chrome 120.0.0.0
[os] => Windows 10.0
[device] => Desktop
[raw] => Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 ...
)
次の拡張機能を既存の基礎に追加できます。
あなた自身のアプリUAにmyApp/3.4.5などのカスタムUA識別子のサポートを追加する
UAデータベース( https://gitbox.net/ua-databaseなど)を統合して、より多くのデバイス認識をサポートします
処理効率を改善するためのキャッシュメカニズムを提供します
このクラスを作曲家パッケージにカプセル化して、簡単に再利用して更新します
効率的なget_client_versionツールのクラスをカプセル化することで、クライアントが認識したコードロジックを大幅に簡素化するだけでなく、アプリケーションをより保守可能でスケーラブルにすることもできます。毎回ユーザーエージェントを手動で解析する代わりに、それを処理するために強力で信頼できるツールクラスに任せる方が良いでしょう。
デバイスとブラウザのタイプの数が増えているため、優れたパッケージがユーザー認識の最前線にプロジェクトを維持します。