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

ThinkPHP 判斷行動裝置與 PC 瀏覽器:User-Agent 解析實作

     編輯:PHP 相關知識

ThinkPHP 判斷行動裝置與 PC 瀏覽器

根據 `User-Agent` 標頭識別客戶端類型,動態切換項目模組 (如 `Home` PC 端、`Mobile` 行動端),實現同域名下不同模板輸出。

核心判斷函數

<?php
function is_mobile(): bool {
    $ua = $_SERVER['HTTP_USER_AGENT'] ?? '';
    if (!$ua) return false;

    // 常見行動裝置關鍵字 (持續更新)
    $mobileKeywords = [
        'android', 'iphone', 'ipad', 'ipod', 'blackberry', 'windows phone',
        'opera mini', 'opera mobi', 'mobile', 'tablet', 'kindle', 'silk',
        'xiaomi', 'huawei', 'oppo', 'vivo', 'meizu', 'oneplus', 'google pixel',
        'fennec', 'crios', 'fxios', 'ucbrowser', 'miui', 'flyme',
    ];

    $uaLower = strtolower($ua);
    foreach ($mobileKeywords as $kw) {
        if (strpos($uaLower, $kw) !== false) {
            return true;
        }
    }
    return false;
}
?>

入口檔案動態切換模組 (index.php)

<?php
define('THINK_PATH', __DIR__ . '/thinkphp/');
define('APP_DEBUG', true);

// 載入判斷函數 (或放入 common.php)
require __DIR__ . '/common.php';

if (is_mobile()) {
    // 行動裝置 → Mobile 模組
    define('BIND_MODULE', 'Mobile');
    define('APP_PATH', __DIR__ . '/application/mobile/');
} else {
    // PC 端 → Home 模組
    define('BIND_MODULE', 'Home');
    define('APP_PATH', __DIR__ . '/application/home/');
}

// ThinkPHP 3.2+ 支援 BIND_MODULE 常數直接綁定模組
require THINK_PATH . 'ThinkPHP.php';
?>

ThinkPHP 5/6 版本寫法

<?php
// public/index.php
require __DIR__ . '/vendor/autoload.php';

$app = require __DIR__ . '/config/app.php'; // 應用配置

// 動態修改默認模組
if (is_mobile()) {
    $app['default_module'] = 'mobile';
    // 可選:載入行動端專屬配置
    $mobileConfig = __DIR__ . '/config/mobile.php';
    if (is_file($mobileConfig)) {
        $app = array_merge($app, require $mobileConfig);
    }
}

$http = (new \think\App($app))->http;
$response = $http->run();
$response->send();
$http->end($response);
?>

進階:使用成熟解析庫

手寫關鍵字列表難以維護,建議引入 **Mobile_Detect** (PHP 經典庫) 或 **WhichBrowser** (更詳細):

composer require mobiledetect/mobiledetectlib
<?php
use Detection\MobileDetect;

function is_mobile(): bool {
    $detect = new MobileDetect();
    return $detect->isMobile() || $detect->isTablet();
}
?>

響應式設計 vs 獨立模板

策略優點缺點
獨立模板 (本文方案)極致客製化、精簡行動端資源、舊專案相容維護兩套視圖、內容同步成本高
響應式 (RWD) + 同一模板單一代碼庫、CSS/JS 邏輯復用、SEO 友善複雜互動難適配、行動端可能載入多餘資源
適應性設計 (Adaptive) / SSR 分流伺服器端輸出差異化 HTML、效能最佳架構複雜、快取策略棘手

快取與 SEO 注意

  • 若使用同一 URL 輸出不同內容,**必須設定 `Vary: User-Agent` 標頭**,避免 CDN/Proxy 快取錯誤版本。
  • Google 建議採用 **響應式設計** 或 **動態服務 (Vary 標頭)**,避免獨立 m. 子域名 (需 `rel="alternate"` `rel="canonical"`)。
  • 行動端判斷邏輯應輕量、快速,避免拖慢首屏渲染。

靈活運用 User-Agent 判斷與模組綁定,可在不改變 URL 架構下快速支援行動端專屬體驗。

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