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

2021-05-08 0 499

方法一:判断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> 

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

捷丰下载 技术教程 php判断访问者是否手机客户端实例 https://www.nwgamer.com/341.html

常见问题

相关文章

官方客服团队

为您解决烦忧 - 24小时在线 专业服务