Web開発では、特にクライアント環境に応答する必要がある場合、クライアントブラウザーまたはオペレーティングシステムのバージョン情報を取得することが一般的な要件です。 PHPで一般的に使用されるメソッドの1つは、 get_client_version()関数とpreg_match()を組み合わせて、HTTPリクエストヘッダーのユーザーエージェント文字列を解析することです。
この記事では、実際のコード例を使用して、このプロセスの実装の詳細を詳細に分析します。
ユーザーエージェントは、クライアント(通常はブラウザ)がリクエストを送信するときに付随するHTTPヘッダーのフィールドであり、ソフトウェアとハードウェア環境情報をサーバーに通知します。典型的なユーザーエージェントの例は次のとおりです。
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36
get_client_version()関数の主な機能は、ユーザーのユーザーエージェント文字列から指定されたブラウザまたはクライアントのバージョン番号を抽出することです。この目標を達成するためのコアテクノロジーは、正規表現マッチングであり、PHPのpreg_match()はこの仕事をするのが得意です。
以下は、Chromeブラウザのバージョン番号を抽出するために使用される関数get_client_version()の例です。
function get_client_version($userAgent, $clientName) {
$version = null;
switch (strtolower($clientName)) {
case 'chrome':
if (preg_match('/Chrome\/([\d\.]+)/i', $userAgent, $matches)) {
$version = $matches[1];
}
break;
case 'firefox':
if (preg_match('/Firefox\/([\d\.]+)/i', $userAgent, $matches)) {
$version = $matches[1];
}
break;
case 'safari':
if (preg_match('/Version\/([\d\.]+).*Safari/', $userAgent, $matches)) {
$version = $matches[1];
}
break;
case 'edge':
if (preg_match('/Edg\/([\d\.]+)/i', $userAgent, $matches)) {
$version = $matches[1];
}
break;
default:
// より多くのクライアントを拡張できます
break;
}
return $version;
}
preg_match()は、通常のマッチングを実行するPHPの関数であり、その使用法は次のとおりです。
preg_match(正規表現, 一致する文字列, 結果配列を一致させます);
正規表現の意味/ chrome/([\ d\.]+)
Chrome/ :固定された文字列「Chrome/」を一致させます。
([\ d \。]+) :連続した数字またはドット(つまりバージョン番号)のセットをキャプチャし、ブラケットはキャプチャグループを示します。
/i :ケースマッチングを無視します。
試合が成功した後、バージョン番号は$マッチ[1]に抽出され、使用のために関数に戻ります。
これが完全なテストの例です。
$userAgent = $_SERVER['HTTP_USER_AGENT'];
$client = 'chrome'; // 転送できます 'firefox', 'safari' 待って
$version = get_client_version($userAgent, $client);
echo "現在使用されています $client ブラウザバージョンはです: $version";
ローカルサーバーでhttp://gitbox.net/test.phpにアクセスする場合(そのドメインに展開されていると仮定)、Chromeブラウザーを使用すると、次のようなものが出力されます。
現在使用されています chrome ブラウザバージョンはです: 122.0.0.0
拡張性:より多くのクライアント(Opera、UCブラウザーなど)のサポートを簡単に追加でき、ケースと対応する規則性を追加できます。
堅牢性:nullまたはエラー値を避けるために、ユーザーエージェント文字列の基本的な検証を実行することをお勧めします。
セキュリティ:ユーザーエージェントの解析は一般的に安全ですが、認証などの重要なシナリオでは使用しないことをお勧めします。