记录学习与后端知识并分享学习代码过程(会飞的鱼Blog)

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

会飞的鱼 0 1602 2017年9月30日

方法一:判断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> 
本文由 @会飞的鱼 于 2017-9-30 发布在 会飞的鱼Blog,如无特别说明,本博文章均为原创,转载请保留出处。

网友评论

    暂无评论

会飞的鱼 在线咨询

在线时间:9:00-22:00
周六、周日:14:00-22:00