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'])) {
-
- 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'
- );
-
- if(preg_match("/(" . implode('|', $clientkeywords) . ")/i", strtolower($_SERVER['HTTP_USER_AGENT']))) {
- return true;
- }
-
- }
-
-
- if (isset ($_SERVER['HTTP_ACCEPT'])) {
-
-
- 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>
|