首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 精準識別用戶瀏覽器與作業系統:User-Agent 解析實戰函數庫

     編輯:PHP 相關知識

核心價值:從 User-Agent 到業務洞察

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);

四、生產環境維護建議

  1. 引入成熟庫:推薦使用 jenssegers/agent(基於 ua-parser),定期更新正則庫,覆蓋最新設備/瀏覽器。
  2. 緩存解析結果:同一 UA 字符串在請求周期內只解析一次,或用 Redis 緩存熱門 UA 解析結果。
  3. 防偽造處理:關鍵業務(登錄、支付)不可單憑 UA 判斷,需結合設備指紋、行為分析。
  4. 隱私合規:UA 屬於個人信息範疇,收集存儲需符合 GDPR/個信法要求,脫敏處理。

總結

User-Agent 解析看似簡單,實則是「獵貓鼠遊戲」。自建函數適合輕量級項目,中大型系統務必接入專業解析庫並建立更新機制,才能持續獲得準確的客戶端環境洞察。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved