php判斷訪問者是否手機客戶端實例

方法一:判斷HTTP_USER_AGENT


$agent = strtolower($_SERVER['HTTP_USER_AGENT']);  
if(strpos($agent,"netfront") || strpos($agent,"iphone") || strpos($agent,"midp-2.0") || strpos($agent,"opera mini") || strpos($agent,"ucweb") || strpos($agent,"android") || strpos($agent,"windows ce") || strpos($agent,"symbianos")) { 
    Header("HTTP/1.1 301 Moved Permanently"); 
    header("Location:####");  die; 
}

方法二:判斷HTTP_ACCEPT



if (isset($_SERVER['HTTP_ACCEPT']) && (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')) )) {//手機訪問  
    Header("HTTP/1.1 301 Moved Permanently"); 
    header("Location:####"); die; 
}

以上兩個方法都有局限性,

下面將此兩種方法整合起來判斷


function isMobile() { 
    if(isset($_SERVER['HTTP_X_WAP_PROFILE'])) { 
        return true; 
    } 
    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; 
}


上面的方法也存在一些小問題,這里我根據自己的經驗來告訴大我們可以使用屏幕寬度來實現再加機器類型了,因為有時HTTP_USER_AGENT信息在我們上面并未定義過了,不過上面實現幾乎兼容了主流手機了。

我們還可以使用js

<html>

 <body>

  <script type="text/javascript">
   function browserRedirect() {
    var sUserAgent = navigator.userAgent.toLowerCase();
    var bIsIpad = sUserAgent.match(/ipad/i) == "ipad";
    var bIsIphoneOs = sUserAgent.match(/iphone os/i) == "iphone os";
    var bIsMidp = sUserAgent.match(/midp/i) == "midp";
    var bIsUc7 = sUserAgent.match(/rv:1.2.3.4/i) == "rv:1.2.3.4";
    var bIsUc = sUserAgent.match(/ucweb/i) == "ucweb";
    var bIsAndroid = sUserAgent.match(/android/i) == "android";
    var bIsCE = sUserAgent.match(/windows ce/i) == "windows ce";
    var bIsWM = sUserAgent.match(/windows mobile/i) == "windows mobile";

    if (bIsIpad || bIsIphoneOs || bIsMidp || bIsUc7 || bIsUc || bIsAndroid || bIsCE || bIsWM) {
     window.location.href = 'http://url/mobile.html';
    } else {
     window.location = 'http://url/pc.html';
    }

   }

   browserRedirect();
  </script>

 </body>
</html> 


轉載請注明出處 AE博客|墨淵 ? php判斷訪問者是否手機客戶端實例

相關推薦

發表評論

路人甲

網友評論(0)