PHP判斷是否手機端或PC端訪問

啊裡鴻途發表於2017-08-20

1.在PublicController控制器中寫好判斷手機端方法。

<?php
namespace HomeController;
use ThinkController;
class PublicController extends Controller {
    
    //判斷是否是手機端還是電腦端
    function isMobile(){
        // 如果有Http_X_WAP_PROFILE則一定是移動裝置
        if (isset ($_SERVER[`HTTP_X_WAP_PROFILE`])){
            return true;
        }
        // 如果via資訊含有wap則一定是移動裝置,部分服務商會遮蔽該資訊
        if (isset ($_SERVER[`HTTP_VIA`])){
            // 找不到為flase,否則為true
            return stristr($_SERVER[`HTTP_VIA`], "wap") ? true : false;
        }
        // 腦殘法,判斷手機傳送的客戶端標誌,相容性有待提高
        if (isset ($_SERVER[`HTTP_USER_AGENT`])){
            $clientkeywords = array (`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`
            );
            // 從HTTP_USER_AGENT中查詢手機瀏覽器的關鍵字
            if (preg_match("/(" . implode(`|`, $clientkeywords) . ")/i", strtolower($_SERVER[`HTTP_USER_AGENT`]))){
                return true;
            }
        }
        // 協議法,因為有可能不準確,放到最後判斷
        if (isset ($_SERVER[`HTTP_ACCEPT`])){
            // 如果只支援wml並且不支援HTML那一定是移動裝置
            // 如果支援wml和html但是wml在html之前則是移動裝置
            if ((strpos($_SERVER[`HTTP_ACCEPT`], `vnd.wap.wml`) !== false) && (strpos($_SERVER[`HTTP_ACCEPT`], `text/html`) === false || (strpos($_SERVER[`HTTP_ACCEPT`], `vnd.wap.wml`) < strpos($_SERVER[`HTTP_ACCEPT`], `text/html`)))){
                return true;
            }
        }
        return false;
    }
}

2.在PHP控制器 IndexController.class.php中繼承該方法:

<?php
namespace HomeController;
use ThinkController;
class IndexController extends PublicController {

    function __construct(){   //構造方法   
        parent::__construct();
    }

3.在方法中呼叫並例項化:

    /*使用者首頁*/
    public function Personal(){
        $mobile = parent::isMobile(); //例項化該方法 
        if($mobile=="true"){
            $this->display(Personal);
        }else{
            $this->display(Wap_Personal);
        }
       
    }


相關文章