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

ThinkPHP 判斷行動裝置與 PC 端並自動切換模板

     編輯:PHP 綜合知識

核心邏輯:User-Agent 特徵字串匹配

<?php
/**
 * 判斷是否為行動裝置
 * @return bool
 */
function is_mobile() {
    $user_agent = $_SERVER['HTTP_USER_AGENT'];

    // 常見行動裝置 UA 關鍵字庫(持續更新)
    $mobile_agents = [
        "240x320", "acer", "acoon", "acs-", "abacho", "ahong", "airness",
        "alcatel", "amoi", "android", "anywhereyougo.com", "applewebkit/525",
        "applewebkit/532", "asus", "audio", "au-mic", "avantogo", "becker",
        "benq", "bilbo", "bird", "blackberry", "blazer", "bleu", "cdm-",
        "compal", "coolpad", "danger", "dbtel", "dopod", "elaine", "eric",
        "etouch", "fly ", "fly_", "fly-", "go.web", "goodaccess", "gradiente",
        "grundig", "haier", "hedy", "hitachi", "htc", "huawei", "hutchison",
        "inno", "ipad", "ipaq", "ipod", "jbrowser", "kddi", "kgt", "kwc",
        "lenovo", "lg ", "lg2", "lg3", "lg4", "lg5", "lg7", "lg8", "lg9",
        "lg-", "lge-", "lge9", "longcos", "maemo", "mercator", "meridian",
        "micromax", "midp", "mini", "mitsu", "mmm", "mmp", "mobi", "mot-",
        "moto", "nec-", "netfront", "newgen", "nexian", "nf-browser",
        "nintendo", "nitro", "nokia", "nook", "novarra", "obigo", "palm",
        "panasonic", "pantech", "philips", "phone", "pg-", "playstation",
        "pocket", "pt-", "qc-", "qtek", "rover", "sagem", "sama", "samu",
        "sanyo", "samsung", "sch-", "scooter", "sec-", "sendo", "sgh-",
        "sharp", "siemens", "sie-", "softbank", "sony", "spice", "sprint",
        "spv", "symbian", "tablet", "talkabout", "tcl-", "teleca", "telit",
        "tianyu", "tim-", "toshiba", "tsm", "up.browser", "utec", "utstar",
        "verykool", "virgin", "vk-", "voda", "voxtel", "vx", "wap",
        "wellco", "wig browser", "wii", "windows ce", "wireless", "xda",
        "xde", "zte"
    ];

    $is_mobile = false;
    foreach ($mobile_agents as $device) {
        if (stripos($user_agent, $device) !== false) {
            $is_mobile = true;
            break;
        }
    }
    return $is_mobile;
}

入口檔案整合:動態定義模組路徑

<?php
define('THINK_PATH', './CORE/');

if (is_mobile()) {
    // 行動裝置:切換至 mobi 模組
    define('APP_NAME', 'mobi');
    define('APP_PATH', './mobi/');
    echo '您是手機端訪問,已切換至行動版模板';
} else {
    // PC 端:使用預設 Home 模組
    define('APP_NAME', 'Home');
    define('APP_PATH', './Home/');
    echo '您是 PC 端訪問';
}

define('APP_DEBUG', false);
require THINK_PATH . 'core.php';

進階優化建議

  • 正規化 UA 庫: 使用 Mobile_Detect 等成熟函式庫,支援平板、機器人、特定 App 判斷
  • 響應式設計優先: 現代專案建議採用 CSS Media Query / Bootstrap 等響應式框架,單一模板自適應,避免維護雙套模板
  • 快取判斷結果: 將判斷結果存入 Session/Cookie,避免每請求重複解析 UA
  • Vary 標頭: 回應時加上 Vary: User-Agent,確保 Proxy/CDN 正確快取不同裝置版本

雖然 UA 判斷可快速實現裝置分流,但長期維護建議轉向響應式設計或 Server-Side Components (如 React Server Components) 架構。

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