php 判断是手机版还是电脑端
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变为手机设备,从而模拟手机访问网站。
php 判断是手机版还是电脑端的更多相关文章
- phpcms v9 黄页实现手机访问手机版,电脑访问电脑版(双模板)
第一步.模板文件夹下,yp复制一份,改名字 ypwap 第二步.修改phpcms/modules/yp/index.php和phpcms/modules/ypwap/index.php //判断客户端 ...
- 判断是手机端还是电脑端 isMobile()
1.在PublicController控制器中写好判断手机端方法. <?php namespace Home\Controller; use Think\Controller; class Pu ...
- discuz php判断是手机访问还是电脑访问网站
首先在模块处填入代码: //手机网页跳转 //如果检测到访问的浏览器为下列一个指定的移动浏览器 则返回true function is_mobile(){ $regex_match="/(n ...
- js 判断当前操作系统 ios, android, 电脑端
一 . js判断移动端的操作系统(ios或Android) $(function () { var u = navigator.userAgent; var isAndroid = u.index ...
- app手机端连接tomcat电脑端服务器
1.你要在电脑端开启并启动tomcat 2.启动nginx,然后需要在nginx中配置好端口号,每一个app的模块端口号是不一样的,需要你进行更改 3.如下图代表app连接的端口: 4.关于sql过滤 ...
- HTML页面如何判断是手机访问还是电脑访问
可以通过js来判断访问设备,代码如下: <script type="text/javascript"> var system ={}; var p = navigato ...
- php如何判断是手机访问还是电脑访问
<?php function isMobile(){ $useragent=isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AG ...
- JS判断是手机访问还是PC端访问网站
<script> if ((navigator.userAgent.match(/(iPhone|iPod|Android|ios|iOS|iPad|Backerry|WebOS|S ...
- js判断是手机访问还是电脑访问
<script type="text/javascript"> <!-- //平台.设备和操作系统 var syste ...
随机推荐
- Android如何连接MySQL数据库
Android开发中,大多数连接到远程MySQL数据库的方法是加入特定的Service到代码中.由于MySQL通常是和PHP一起使用的,最简单以及最常见的方法是写PHP脚本管理数据连接,以及从Andr ...
- (转)php自己创建框架
前言 说到写PHP的MVC框架,大家想到的第一个词--“造轮子”,是的,一个还没有深厚功力的程序员,写出的PHP框架肯定不如那些出自大神们之手.经过时间和各种项目考验的框架.但我还是准备并且这么做了, ...
- [转]java动态代理(JDK和cglib)
转自:http://www.cnblogs.com/jqyp/archive/2010/08/20/1805041.html java动态代理(JDK和cglib) JAVA的动态代理 代理模式 代理 ...
- overflow遭遇场景
没有设置高度而由内容撑高的子div在遇到固定高度的父div,想做一个离上边缘有间距的效果,给padding-top会同时撑大父div,给margin-top会把父div拉下来,这时候的子div像是紧紧 ...
- CentOS 7 搭建 LNMP
一.安装httpd 1.yum install httpd -y 2.启动服务:systemctl start httpd 3.设置开机启动:systemctl enable 二.安装mariadb ...
- luagd介绍
luagd 官网: http://ittner.github.io/lua-gd/ 下载 http://files.luaforge.net/releases/lua-gd/lua-gd/lua-gd ...
- 重启redis报错:Waiting for Redis to shutdown
重启redis,发现一直报:Waiting for Redis to shutdown service redis_6379 restart Stopping ... OK (error) NOAUT ...
- 用Unity开发HTC VIVE——移动漫游篇
这篇文章主要写的是通过手柄控制移动在场景中漫游.在通过手柄控制移动时,我主要写了两个脚本一个ChildTransform.cs.Move.cs;1. ChildTransform这个脚本主要是为了获取 ...
- Android -- 自定义View小Demo,绘制四位数随机码(一)
1,现在有这样一个需求,实现显示随机随机数可能在代码中直接很简单的就实现了,但是现在我们直接自定义View来实现这个效果,那么我们来分析一波吧,我们允许开发者自己设置这个textview的大小,颜色, ...
- js 的闭包
今天看了关于js闭包方面的文章,还是有些云里雾里,对于一个菜鸟来说,学习闭包确实有一定的难度,不说别的,能够在网上找到一篇优秀的是那样的不易. 当然之所以闭包难理解,个人觉得是基础知识掌握的不牢,因为 ...