最近移动互联网火爆了我们需要做一个 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 信息在我们上面并未定义过了, 不过上面实现几乎兼容了主流手机了.
来源: https://www.php1.cn/detail/php-80fac5dbc1.html