Web開発では、クライアント(ブラウザ、オペレーティングシステムなど)の情報を理解することは、さまざまな環境へのデバッグや適応に非常に重要です。 PHPにはget_browser()関数が付属しています。これは、ユーザーのブラウザとその特性を識別するために使用できますが、その精度はbrowserscap.iniファイルの更新頻度の影響を受け、すべてのニーズを満たすことができません。
クライアントバージョン情報をより正確に識別するために、 get_client_version関数をカスタマイズすることにより、get_browser()と併せて使用できます。以下は、それを実装する方法を詳細に説明します。
まず、PHP構成でBrowsercapが有効になっていることを確認し、最新のBrowsercap.iniファイルを指してください。
php.iniで構成:
browscap = "https://gitbox.net/path/to/browscap.ini"
もちろん、実際の展開中にbrowser.iniをローカルサーバーにダウンロードし、リクエストごとにリモートアクセスを回避するためのローカルパスとして構成することをお勧めします。
PHPで実装する方法の簡単な例を次に示します。
<?php
/**
* クライアントバージョン情報を取得します
*
* @return array
*/
function get_client_version() {
$userAgent = $_SERVER['HTTP_USER_AGENT'] ?? '';
$browserInfo = get_browser(null, true);
$clientData = [
'browser' => $browserInfo['browser'] ?? 'Unknown',
'version' => $browserInfo['version'] ?? 'Unknown',
'platform' => $browserInfo['platform'] ?? 'Unknown',
'user_agent' => $userAgent,
];
// 特定の特別な状況の補足テスト,たとえば、モバイル
if (stripos($userAgent, 'iPhone') !== false) {
$clientData['device'] = 'iPhone';
} elseif (stripos($userAgent, 'Android') !== false) {
$clientData['device'] = 'Android';
} else {
$clientData['device'] = 'Desktop';
}
return $clientData;
}
// コール例
$clientInfo = get_client_version();
echo '<pre>';
print_r($clientInfo);
echo '</pre>';
?>
get_browser()によって取得された情報が比較的粗い場合があります。正規表現を組み合わせて、WeChatブラウザー、ミニプログラム、Douyinブラウザーなどの識別など、ユーザーエージェントの二次分析を実行できます。
<?php
/**
* クライアントバージョンのより正確な識別,特定のものを含めますApp内蔵ブラウザ
*
* @return array
*/
function get_client_version() {
$userAgent = $_SERVER['HTTP_USER_AGENT'] ?? '';
$browserInfo = get_browser(null, true);
$clientData = [
'browser' => $browserInfo['browser'] ?? 'Unknown',
'version' => $browserInfo['version'] ?? 'Unknown',
'platform' => $browserInfo['platform'] ?? 'Unknown',
'user_agent' => $userAgent,
'device' => 'Desktop',
'app' => 'None'
];
if (stripos($userAgent, 'iPhone') !== false) {
$clientData['device'] = 'iPhone';
} elseif (stripos($userAgent, 'Android') !== false) {
$clientData['device'] = 'Android';
}
// 特別な検出App内蔵ブラウザ
if (stripos($userAgent, 'MicroMessenger') !== false) {
$clientData['app'] = 'WeChat';
} elseif (stripos($userAgent, 'Douyin') !== false) {
$clientData['app'] = 'Douyin';
} elseif (stripos($userAgent, 'miniProgram') !== false) {
$clientData['app'] = 'MiniProgram';
}
return $clientData;
}
// コール例
$clientInfo = get_client_version();
echo '<pre>';
print_r($clientInfo);
echo '</pre>';
?>
get_browser()は、 browserscap.iniファイルに依存します。定期的に更新することを忘れないでください。そうしないと、認識結果が時代遅れになる場合があります。
ユーザーはユーザーエージェントを偽造できるため、これらの認識方法は、セキュリティ検証ではなく、最適化エクスペリエンスにのみ適しています。
より複雑な識別が必要な場合(内側と外側のブラウザーなどを区別するなど)、 WhathBrowser/Parserなどのサードパーティライブラリと組み合わせてさらに強化できます。
PHPのget_browser()関数とCustom get_client_versionロジックを組み合わせることにより、クライアント認識の精度と柔軟性を効果的に改善できます。特にモバイルインターネット環境では、デバイスとアプリ環境を正確に識別でき、ユーザーエクスペリエンスと機能適応を大幅に最適化できます。