PHP 怎么识别手机访问

作者&投稿:潜秀 (若有异议请与网页底部的电邮联系)
php如何判断是手机访问还是电脑访问~

<?
/** *程 序:iswap.php判断是否是通过手机访问
*版 本:Ver 1.0 beta
*修 改:奇迹方舟(imiku.com)
*最后更新:2010.11.4 22:56
*程序返回:@return bool 是否是移动设备
*该程序可以任意传播和修改,但是请保留以上版权信息!
*/
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'
);
// 从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;
}
?>


function IsPC() {
var userAgentInfo = navigator.userAgent;
var Agents = ["Android", "iPhone",
"SymbianOS", "Windows Phone",
"iPad", "iPod"];
var flag = true;
for (var v = 0; v < Agents.length; v++) {
if (userAgentInfo.indexOf(Agents[v]) > 0) {
flag = false;
break;
}
}
return flag;
}
if(!IsPC()){
//不是电脑端的代码

}

网上现在有三种观点, 一种是基于浏览器发送的 User-Agent, 但明显这种方法是行不通的, 虽然有人列出了大多数的手机发送的User-Agent, 但依然会有很多手机无法识别, 甚至有些手机浏览器不发送User-Agent, 而且也不能保证以后就不会出新牌子.

下面是一个php的例子, 看过之后你就会知道有多么不可靠.

1. function is_wap(){
2. $ua = strtolower($_SERVER['HTTP_USER_AGENT']);
3. $uachar = "/(nokia|sony|ericsson|mot|samsung|sgh|lg|sie|philips|panasonic|alcatel|lenovo|cldc|midp|wap|mobile)/i";
4. if(($ua == '' || preg_match($uachar, $ua))&& !strpos(strtolower($_SERVER['REQUEST_URI']),'wap')){
5. return true;
6. }else{
7. return false;
8. }
9. }

另外一种是判断HTTP_ACCEPT, 这种应该相对可靠一点, 不过HTTP_ACCEPT是非常复杂的, 如果一般的不支持html的浏览器还好说, 你只要判断浏览器支持wml并且不支持html就可以, 但如果浏览器同时支持wml和html那就难办了, 低端手机可能会将wml放到html的前面, 但是很多高端手机或者智能手机对html的支持很好, 所以html也会出现在wml前面.

这是黑莓手机发送的HTTP_ACCEPT

application/vnd.rim.html,
text/html,
application/vnd.wap.xhtml+xml,
text/vnd.sun.j2me.app-descriptor,
image/vnd.rim.png,image/jpeg,
application/x-vnd.rim.pme.b,
application/vnd.rim.ucs,
image/gif;anim=1,
application/vnd.rim.jscriptc;v=0-8-8,
application/x-javascript,
application/vnd.rim.css;v=1,
text/css;media=handheld,
application/vnd.wap.wmlc;q=0.9,
application/vnd.wap.wmlscriptc;q=0.7,
text/vnd.wap.wml;q=0.7,
*/*;q=0.5

夸张吧? 不过的确是很标准的, 开发人员可以根据这个得到很多信息, 但很多手机都没这么标准的, 如果你查看IE或者FF的HTTP_ACCEPT你会发现它很短.

text/html,
application/xhtml+xml,
application/xml;q=0.9,
*/*;q=0.8

同样, 给你个php的例子.

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'))
)) {//手机访问
readfile('index.wml');
} else readfile('index.htm');

原理:如果浏览器支持WML、而且[不支持HTML]或[WML优先于HTML],则判定为手机。但实际上这个原理是不正确的.

还有一种是说判断网关或者IP什么的, 但我个人认为这个很不可靠, 手机的联网方式很多, 比如我开发的时候就是用模拟器的.这个应该不用什么例子了, REMOTE_ADDR 就足够了

你好!
markerWANG回答的太复杂了

用的XHTML页面
根本不是wap 光支持wap的手机是打不开这中页面的

如果用wap和html 需要做2套网站(wap的做起来很快很简单的)
在wap的首页或hmtl首页用个判断 http头,然后跳转

给个discuz的代码你参考下
if(preg_match('/(mozilla|m3gate|winwap|openwave)/i', $_SERVER['HTTP_USER_AGENT']))
{
跳转
}

good luck!


浠水县19720392009: PHP 怎么判断是同一个手机访问? -
拔变洛希: PHP作为基于HTTP运行的服务器端语言,是无法直接判断每次访问的手机是否属于同一个用户,加上目前三大手机运营商对请求手机端的号码的屏蔽,因此无法直接获得,这个时候可以使用session技术存储手机端的特殊标志,当然,需要手机端同时开启cookie存储对应的session编号. 大概原理就是这样.

浠水县19720392009: php 判断是否是手机浏览器访问 -
拔变洛希: //php加载函数要比加载类要快一些,建议使用函数判断/** *判断是否是通过手机访问 **/ function isMobile() { // 如果有HTTP_X_WAP_PROFILE则一定是移动设备 if (isset ($_SERVER['HTTP_X_WAP_PROFILE'])) { return true; } //如果via信息...

浠水县19720392009: PHP判断是否是通过手机访问 -
拔变洛希: 你好,PHP判断是否通过手机访问可以通过浏览器的UA判断..<?php if(stripos($_SERVER['HTTP_USER_AGENT'],"android")!=flase||stripos($_SERVER['HTTP_USER_AGENT'],"ios")!=flase||stripos($_SERVER['HTTP_USER_AGENT'],"wp")!=flase) { echo '手机访问'; } else { echo '电脑访问'; }?> 主要是因为浏览器USER_AGENT有操作系统名称,所以通过此函数判断.

浠水县19720392009: 在 PHP 开发中如何判断用户是否使用手机? -
拔变洛希: PHP通过内置全局变量$_SERVER['HTTP_USER_AGENT']来获取用户信息,包括浏览器信息,操作系统等;判断是否是手机还是电脑终端访问,只需判断他的$_SERVER['HTTP_USER_AGENT']信息是否存在手机终端类型即可.示例如下: ...

浠水县19720392009: php怎么判断客户是用手机还是用电脑访问的网站? -
拔变洛希: <? /** *程 序:iswap.php判断是否是通过手机访问 *版 本:Ver 1.0 beta *修 改:奇迹方舟(imiku.com) *最后更新:2010.11.4 22:56 *程序返回:@return bool 是否是移动设备 *该程序可以任意传播和修改,但是请保留以上版权信息! */ function...

浠水县19720392009: PHP 怎么识别手机访问 -
拔变洛希: 网上现在有三种观点, 一种是基于浏览器发送的 User-Agent, 但明显这种方法是行不通的, 虽然有人列出了大多数的手机发送的User-Agent, 但依然会有很多手机无法识别, 甚至有些手机浏览器不发送User-Agent, 而且也不能保证以后就不...

浠水县19720392009: php判断用户是否使用手机设备 -
拔变洛希: php判断用户是否使用手机第一步:如果你和我一样使用的是wordpress,那就复制到主题的 function.php 文件//判断是否属手机 function is_mobile() { $user_agent = $_SERVER['HTTP_USER_AGENT']; $mobile_agents = Array("240x320","...

浠水县19720392009: php判断访问来源是PC还是手机端 -
拔变洛希: 1. 主要是通过$_server ['http_user_agent']来判断的2. 自己整理的一个方法,代码如下 /** * 是否是手机访问 ,true是,false否 * @return boolean */ public static function ismobile() { $mobilebrowser_list = array ( 'iphone', 'android', 'phone', 'wap', '...

浠水县19720392009: php中怎样实现判断是手机访问还是电脑浏览器访问 -
拔变洛希: 严格的讲 strpos($_SERVER['HTTP_ACCEPT'],'wap')!==false 判断是不够的,网上找了段比较全的测试无误,贴出来mark下: /** * 判断是手机访问pc访问 */ protected function check_wap() { if (isset($_SERVER['HTTP_VIA'])) { return true; } if (isset...

浠水县19720392009: PHP怎样识别手机与电脑的不同访问 -
拔变洛希: 这个可以使用js来判断一下UA就可以了..下面是一个手机访问跳转到手机版页面的例子123456789101112131415 (functionbrowserRedirect(){ varsUserAgent = navigator.userAgent.toLowerCase(); varbIsIpad = sUserAgent.match(/ipad/i) == '...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网