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

PHP 精準偵測行動裝置來源:多維度 User-Agent 判斷邏輯實作

     編輯:PHP 相關知識

響應式設計雖能適配螢幕,但仍會載入桌機端資源浪費行動裝置頻寬。伺服器端透過 PHP 判斷裝置類型,可直接輸出輕量化模板,顯著提升行動端體驗。本文提供涵蓋 HTTP 標頭、User-Agent 關鍵字、協議接受度的多層次偵測函式。

完整偵測函式:isMobile()

<?php
function isMobile(): bool {
    // 1. WAP Profile 標頭(極高可信度)
    if (isset($_SERVER['HTTP_X_WAP_PROFILE'])) {
        return true;
    }

    // 2. Via 標頭含 wap(部分代理會過濾)
    if (isset($_SERVER['HTTP_VIA']) && stripos($_SERVER['HTTP_VIA'], 'wap') !== false) {
        return true;
    }

    // 3. User-Agent 關鍵字匹配(核心邏輯,需持續更新)
    if (isset($_SERVER['HTTP_USER_AGENT'])) {
        $clientKeywords = [
            'nokia', 'sony', 'ericsson', 'mot', 'samsung', 'htc', 'sgh', 'lg', 'sharp',
            'sie-', 'philips', 'panasonic', 'alcatel', 'lenovo', 'iphone', 'ipod',
            'blackberry', 'meizu', 'android', 'netfront', 'symbian', 'ucweb',
            'windowsce', 'palm', 'operamini', 'operamobi', 'openwave', 'nexusone',
            'cldc', 'midp', 'wap', 'mobile'
        ];
        $pattern = '/' . implode('|', $clientKeywords) . '/i';
        if (preg_match($pattern, $_SERVER['HTTP_USER_AGENT'])) {
            return true;
        }
    }

    // 4. Accept 協議判斷(兜底邏輯,準確度較低)
    if (isset($_SERVER['HTTP_ACCEPT'])) {
        $accept = $_SERVER['HTTP_ACCEPT'];
        $wmlPos = stripos($accept, 'vnd.wap.wml');
        $htmlPos = stripos($accept, 'text/html');
        // 僅支援 WML,或 WML 優先於 HTML
        if ($wmlPos !== false && ($htmlPos === false || $wmlPos < $htmlPos)) {
            return true;
        }
    }

    return false;
}
?>

判斷邏輯優先級與可信度分析

層級依據可信度誤判風險
1HTTP_X_WAP_PROFILE★★★★★極低(標準 WAP 協議)
2HTTP_VIA 包含 wap★★★★☆低(部分代理移除)
3User-Agent 關鍵字★★★☆☆中(需持續維護關鍵字庫)
4HTTP_ACCEPT 協議順序★★☆☆☆高(現代手機瀏覽器皆支援 HTML)

現代化改良建議

  • 引入成熟函式庫:Mobile_Detect 定期更新裝置特徵庫,支援平板、機器人等細分類別。
  • 快取判斷結果:同一 Session 內重複呼叫可存入 `$_SESSION['is_mobile']` 避免重複運算。
  • 配合響應式設計:伺服器端僅控制「是否載入重型資源(如大圖、複雜 JS)」,版面排版仍交由 CSS Media Queries 處理。

使用範例

<?php
if (isMobile()) {
    include 'templates/mobile/header.php';
    // 輸出精簡版資料、縮圖、無動畫版面
} else {
    include 'templates/desktop/header.php';
    // 輸出完整版資源、高解析度圖片、互動特效
}
?>

透過多層次判斷邏輯與持續維護的特徵庫,PHP 端偵測能有效減少行動端不必要資源載入,是響應式設計的最佳補完。

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