求助万能的大神,使用CDN或者负载代理后,php判断客户端是否手机的办法无效了,该怎么办

求助万能的大神,使用CDN或者负载代理后,php判断客户端是否手机的办法无效了,该怎么办

By b123456 at 2015-08-12
0人收藏 • 2347人看过


function isMobile(){
     // 如果有HTTP_X_WAP_PROFILE则一定是移动设备
    if (isset ($_SERVER['HTTP_X_WAP_PROFILE'])) {
        return true;
    }
	//如果via信息含有wap则一定是移动设备,部分服务商会屏蔽该信息
	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',
			'ios'
        );
		// 从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;
}


4 个回复 | 最后更新于 2015-08-13
lincanbin
2015-08-12
#1

让CDN正确转发UA即可啊。

remenbo
2015-08-13
#2

cdn不缓存判断的那页面啊

lincanbin
2015-08-13
#3

回复#2 @remenbo :

CDN一般不都只设置缓存静态文件吗?

b123456
2015-08-13
#4

重新做了下判断,可以了。


登 录


现在注册

QQ  登 录    Weibo  登 录    GitHub  登 录