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

更新时间:2019-01-15    来源:php常用代码    手机版     字体:

【www.bbyears.com--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

 

  <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>

 
 

本文来源:http://www.bbyears.com/jiaocheng/47300.html

热门标签

更多>>

本类排行