php 判断是手机版还是电脑端

本文介绍了一种使用PHP检测用户是否使用手机浏览器访问网站的方法。通过分析HTTP_USER_AGENT字符串中的特定关键字来判断请求是否来自移动设备。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

 

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;    
}


echo isMobile();

 

乌徒帮发布的wordpress手机版和wordpress主程序相互呼应,不过否子戈想实现当用户用手机访问主站的时候出现进入手机版的提示,虽然可以通过CSS或javascript来实现,然而经过尝试,都不完美。为此,我专门查阅了一些资料,自己建立了一个php判断是否为手机浏览器的函数,用来实现上述目标。

我们通过对浏览器的USER_AGENT来判断用户是否在使用手机浏览器。

USER_AGENT是php用来接收用户访问设备的参数,通过用户访问网站时传送的数据实现。在php用,用echo $_SERVER['HTTP_USER_AGENT']来打印和查看用户的设备(设备使用者才能看到)。而对于程序猿,则利用这个数据判断来访用户所使用的浏览器信息。我们建立以下的php函数:

function is_mobile(){
$user_agent = $_SERVER['HTTP_USER_AGENT'];
if(trim($user_agent) == '')return true;//如果客户端信息为空,我们也认为该设备为手机设备
$mobile_agents = Array("240x320","acer","acoon","acs-","abacho","ahong","airness","alcatel","amoi","android","anywhereyougo.com","applewebkit/525","applewebkit/532","asus","audio","au-mic","avantogo","becker","benq","bilbo","bird","blackberry","blazer","bleu","cdm-","compal","coolpad","danger","dbtel","dopod","elaine","eric","etouch","fly","fly_","fly-","go.web","goodaccess","gradiente","grundig","haier","hedy","hitachi","htc","huawei","hutchison","inno","ipad","ipaq","ipod","jbrowser","kddi","kgt","kwc","lenovo","lg","lg2","lg3","lg4","lg5","lg7","lg8","lg9","lg-","lge-","lge9","longcos","maemo","mercator","meridian","micromax","midp","mini","mitsu","mmm","mmp","mobi","mot-","moto","nec-","netfront","newgen","nexian","nf-browser","nintendo","nitro","nokia","nook","novarra","obigo","palm","panasonic","pantech","philips","phone","pg-","playstation","pocket","pt-","qc-","qtek","rover","sagem","sama","samu","sanyo","samsung","sch-","scooter","sec-","sendo","sgh-","sharp","siemens","sie-","softbank","sony","spice","sprint","spv","symbian","tablet","talkabout","tcl-","teleca","telit","tianyu","tim-","toshiba","tsm","up.browser","utec","utstar","verykool","virgin","vk-","voda","voxtel","vx","wap","wellco","wig browser","wii","windows ce","wireless","xda","xde","zte",'Opera Mini','Kindle','Silk/','Mobile','baidu Transcoder');
$is_mobile = false;
foreach($mobile_agents as $device){
if(stristr($user_agent,$device) !== FALSE){
$is_mobile = true;
break;
}
}
return $is_mobile;
}

 

使用时,只需要用if(is_mobile())进行判断即可,乌徒帮通过这种方法,实现了让顶部的导航在手机浏览时消失,换为适合手机浏览的小导航,不信你可以用手机访问http://www.utubon.com试试看(触屏智能手机效果更佳哦!)。

在这个函数中,我们通过对比我们已经计划好的一些关键字,和$_SERVER['HTTP_USER_AGENT']进行匹配,如果$_SERVER['HTTP_USER_AGENT']中包含了我们给出的一些关键字中的一个,我们就判定用户在使用手机浏览器访问网站。我们要做的就是搜集这些特殊的关键字,它们是确定用户是否为手机浏览用户的唯一标识。

在函数的开头我们有一句if(trim($user_agent) == '')return true;$_SERVER['HTTP_USER_AGENT']为空的话,我们也断定用户在使用手机浏览器,原因是用户如果用桌面版的浏览器访问网站,一般都会有足够的$_SERVER['HTTP_USER_AGENT']信息,而我在阅读一些资料时,有人提到,中国移动会过滤掉$_SERVER['HTTP_USER_AGENT'],因此网站php程序不会接收到$_SERVER['HTTP_USER_AGENT']信息。

为了在PC浏览器上模拟不同的USER_AGENT,我们可以为Chrome或Firefox装上一些插件,如USER AGENT switcher等,可以设置为一些手机设备,让浏览器的USER_AGENT变为手机设备,从而模拟手机访问网站。

转载于:https://www.cnblogs.com/goldenstones/p/4873799.html

<think>好的,用户想用PHP判断设备是手机还是电脑端,需要一个代码示例。首先,我得回忆一下PHP中常用的方法,通常是检查HTTP请求头中的User-Agent字符串。用户代理字符串包含了客户端浏览器的信息,可以用来识别设备类型。 首先,我需要确定如何获取User-Agent。PHP中可以通过$_SERVER['HTTP_USER_AGENT']来获取。然后,需要定义一个包含常见移动设备关键字的数组,比如iPhone、Android、Windows Phone等。接着,使用正则表达式匹配这些关键字是否存在,如果存在就认为是移动设备,否则是桌面设备。 不过,用户代理字符串可能会变化,或者有些设备可能没被包含进去,所以这个方法可能不完全准确。但作为基本实现,应该是可行的。另外,可能需要考虑性能问题,比如使用preg_match而不是循环遍历数组,这样效率更高。 然后,用户可能需要更详细的例子,比如函数封装、返回设备类型或者布尔值。或许还可以提到一些第三方库,比如Mobile Detect,它更全面,但需要引入外部文件。 还需要注意,有时候用户代理可以被伪造,所以这种方法不是百分百可靠,但对于大多数情况足够用了。同时,响应式设计可能更灵活,但用户明确要求用PHP后端判断,所以重点放在PHP代码上。 最后,根据用户的引用,他们之前看到过JavaScript和Flutter的例子,但需要PHP版本。确保代码示例简洁,并附上说明,指出可能的限制和推荐方案。</think>以下是使用PHP判断设备类型的代码示例和实现逻辑: ### PHP判断移动设备的实现方法 ```php function isMobileDevice() { $userAgent = $_SERVER['HTTP_USER_AGENT']; $mobileKeywords = [ 'mobile', 'android', 'silk/', 'phone', 'pad', 'tablet', 'windows phone', 'iphone', 'ipod', 'blackberry', 'opera mini', 'iemobile', 'kindle', 'webos', 'symbian', 'palm', 'maemo' ]; $pattern = '/' . implode('|', $mobileKeywords) . '/i'; return preg_match($pattern, $userAgent) || strpos($userAgent, 'Android') !== false; } // 使用示例 if (isMobileDevice()) { echo "移动端访问"; } else { echo "桌面端访问"; } ``` ### 实现原理说明 1. **User-Agent检测**:通过`$_SERVER['HTTP_USER_AGENT']`获取客户端标识 2. **关键词匹配**:使用正则表达式匹配已知的移动设备关键词 3. **特殊处理Android**:单独检查Android标识,避免某些Android平板被误判 ### 优化建议 1. **使用Mobile Detect库**(推荐): ```php // 下载地址:https://github.com/serbanghita/Mobile-Detect require_once 'Mobile_Detect.php'; $detect = new Mobile_Detect; if ($detect->isMobile()) { // 移动端逻辑 } ``` 2. **结合响应式设计**:建议配合CSS媒体查询使用,实现更精准的适配[^2] ### 注意事项 1. 用户代理可能被伪造,不能100%准确 2. 需要定期更新设备关键词列表 3. 平板设备可能被归类为移动端 4. 某些IoT设备(如智能电视)可能需要特殊处理[^3]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值