好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

php 判断访问者是否手机客户端实例 - php高级应用

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

最近移动互联网火爆了我们需要做一个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 [ '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>  

查看更多关于php 判断访问者是否手机客户端实例 - php高级应用的详细内容...

  阅读:45次