HTTP User-Agent 頭攜帶豐富的客戶端環境信息。精準解析可用於:兼容性統計、針對性降級、安全風控(識別爬蟲/偽造 UA)、用戶畫像構建。本文提供開箱即用的解析函數,並討論維護策略。
function getUserOS(): string {
$ua = $_SERVER['HTTP_USER_AGENT'] ?? '';
// 定義特徵碼映射表,優先級從高到低
$osMap = [
'Windows 11' => ['Windows NT 10.0', 'Windows NT 11.0'],
'Windows 10' => ['Windows NT 10.0'],
'Windows 8.1' => ['Windows NT 6.3'],
'Windows 8' => ['Windows NT 6.2'],
'Windows 7' => ['Windows NT 6.1'],
'Windows Vista' => ['Windows NT 6.0'],
'Windows Server 2003' => ['Windows NT 5.2'],
'Windows XP' => ['Windows NT 5.1'],
'Windows 2000' => ['Windows NT 5.0'],
'Windows ME' => ['Win 9x 4.90'],
'Windows 98' => ['Windows 98'],
'Windows 95' => ['Windows 95'],
'macOS' => ['Macintosh', 'Mac OS X', 'macOS'],
'Linux' => ['Linux', 'X11'],
'Unix' => ['Unix', 'FreeBSD', 'OpenBSD', 'NetBSD', 'SunOS', 'AIX', 'HP-UX'],
'iOS' => ['iPhone', 'iPad', 'iPod'],
'Android' => ['Android'],
'Chrome OS' => ['CrOS'],
];
foreach ($osMap as $os => $patterns) {
foreach ($patterns as $pattern) {
if (stripos($ua, $pattern) !== false) {
return $os;
}
}
}
return 'Unknown';
}
function getUserBrowser(): string {
$ua = $_SERVER['HTTP_USER_AGENT'] ?? '';
// 必須優先檢測特定瀏覽器標識(如 Edge 含 Chrome 標識)
$browserMap = [
'Edge' => ['Edg/'],
'Chrome' => ['Chrome/', 'CriOS/'],
'Firefox' => ['Firefox/', 'FxiOS/'],
'Safari' => ['Version/', 'Safari/'], // 需排除 Chrome
'IE' => ['MSIE ', 'Trident/'],
'Opera' => ['OPR/', 'Opera/'],
'UCBrowser' => ['UCBrowser/'],
'QQBrowser' => ['QQBrowser/'],
'Maxthon' => ['Maxthon/'],
'Sogou' => ['MetaSr', 'Sogou'],
'2345Explorer' => ['2345Explorer'],
'WeChat' => ['MicroMessenger'],
'QQ' => ['QQ/'],
];
foreach ($browserMap as $browser => $patterns) {
foreach ($patterns as $pattern) {
if (stripos($ua, $pattern) !== false) {
// 簡易版本號提取
if (preg_match('/' . preg_quote($pattern, '/') . '([\d.]+)/i', $ua, $matches)) {
return $browser . ' ' . $matches[1];
}
return $browser;
}
}
}
return 'Unknown';
}
$clientInfo = sprintf(
'OS: %s | Browser: %s | IP: %s',
getUserOS(),
getUserBrowser(),
$_SERVER['REMOTE_ADDR'] ?? 'Unknown'
);
// 記錄日誌、存入數據庫、或傳遞給前端分析
error_log($clientInfo);
User-Agent 解析看似簡單,實則是「獵貓鼠遊戲」。自建函數適合輕量級項目,中大型系統務必接入專業解析庫並建立更新機制,才能持續獲得準確的客戶端環境洞察。