>  기사  >  php教程  >  php 判断访问者是否手机客户端实例

php 判断访问者是否手机客户端实例

WBOY
WBOY원래의
2016-05-25 16:44:501410검색

最近移动互联网火爆了我们需要做一个PC站与WAP站,要实现如果用户是电脑访问WAP站就自动进入PC站,反之一样,下面我整理了一些代码与大家一起来看看.

方法一,判断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[&#39;HTTP_ACCEPT&#39;]) && (strpos($_SERVER[&#39;HTTP_ACCEPT&#39;],&#39;vnd.wap.wml&#39;)!==FALSE) &&(strpos($_SERVER[&#39;HTTP_ACCEPT&#39;],&#39;text/html&#39;)===FALSE || (strpos($_SERVER[&#39;HTTP_ACCEPT&#39;],&#39;vnd.wap.wml&#39;) <   
strpos($_SERVER[&#39;HTTP_ACCEPT&#39;],&#39;text/html&#39;)) )) {//手机访问   
    Header("HTTP/1.1 301 Moved Permanently");  
    header("Location:####"); die;  
}

以上两个方法都有局限性,下面将此两种方法整合起来判断,代码如下:

function isMobile() {  
    if(isset($_SERVER[&#39;HTTP_X_WAP_PROFILE&#39;])) {  
        return true;  
    }  
    if(isset ($_SERVER[&#39;HTTP_VIA&#39;])) {  
        //找不到为flase,否则为true  
        return stristr($_SERVER[&#39;HTTP_VIA&#39;], "wap") ? true : false;  
    }  
    if(isset($_SERVER[&#39;HTTP_USER_AGENT&#39;])) {  
        //此数组有待完善  
        $clientkeywords = array (  
        &#39;nokia&#39;,  
        &#39;sony&#39;,  
        &#39;ericsson&#39;,  
        &#39;mot&#39;,  
        &#39;samsung&#39;,  
        &#39;htc&#39;,  
        &#39;sgh&#39;,  
        &#39;lg&#39;,  
        &#39;sharp&#39;,  
        &#39;sie-&#39;,  
        &#39;philips&#39;,  
        &#39;panasonic&#39;,  
        &#39;alcatel&#39;,  
        &#39;lenovo&#39;,  
        &#39;iphone&#39;,  
        &#39;ipod&#39;,  
        &#39;blackberry&#39;,  
        &#39;meizu&#39;,  
        &#39;android&#39;,  
        &#39;netfront&#39;,  
        &#39;symbian&#39;,  
        &#39;ucweb&#39;,  
        &#39;windowsce&#39;,  
        &#39;palm&#39;,  
        &#39;operamini&#39;,  
        &#39;operamobi&#39;,  
        &#39;openwave&#39;,  
        &#39;nexusone&#39;,  
        &#39;cldc&#39;,  
        &#39;midp&#39;,  
        &#39;wap&#39;,  
        &#39;mobile&#39; 
        );  
        // 从HTTP_USER_AGENT中查找手机浏览器的关键字  
        if(preg_match("/(" . implode(&#39;|&#39;, $clientkeywords) . ")/i", strtolower($_SERVER[&#39;HTTP_USER_AGENT&#39;]))) {  
            return true;  
        }  
   
    }  
   
    //协议法,因为有可能不准确,放到最后判断  
    if (isset ($_SERVER[&#39;HTTP_ACCEPT&#39;])) {  
        // 如果只支持wml并且不支持html那一定是移动设备  
        // 如果支持wml和html但是wml在html之前则是移动设备  
        if ((strpos($_SERVER[&#39;HTTP_ACCEPT&#39;], &#39;vnd.wap.wml&#39;) !== false) && (strpos($_SERVER[&#39;HTTP_ACCEPT&#39;], &#39;text/html&#39;) === false || (strpos($_SERVER[&#39;HTTP_ACCEPT&#39;], &#39;vnd.wap.wml&#39;) < strpos($_SERVER[&#39;HTTP_ACCEPT&#39;], &#39;text/html&#39;)))) {  
            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 = &#39;http://url/mobile.html&#39;;
    } else {
        window.location = &#39;http://url/pc.html&#39;;
    }
   }
   browserRedirect();
  </script> 
 </body> 
</html>

               
               

文章网址:

随意转载^^但请附上教程地址。

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.