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 判断是手机版还是电脑端的更多相关文章

  1. phpcms v9 黄页实现手机访问手机版,电脑访问电脑版(双模板)

    第一步.模板文件夹下,yp复制一份,改名字 ypwap 第二步.修改phpcms/modules/yp/index.php和phpcms/modules/ypwap/index.php //判断客户端 ...

  2. 判断是手机端还是电脑端 isMobile()

    1.在PublicController控制器中写好判断手机端方法. <?php namespace Home\Controller; use Think\Controller; class Pu ...

  3. discuz php判断是手机访问还是电脑访问网站

    首先在模块处填入代码: //手机网页跳转 //如果检测到访问的浏览器为下列一个指定的移动浏览器 则返回true function is_mobile(){ $regex_match="/(n ...

  4. js 判断当前操作系统 ios, android, 电脑端

    一 .   js判断移动端的操作系统(ios或Android) $(function () { var u = navigator.userAgent; var isAndroid = u.index ...

  5. app手机端连接tomcat电脑端服务器

    1.你要在电脑端开启并启动tomcat 2.启动nginx,然后需要在nginx中配置好端口号,每一个app的模块端口号是不一样的,需要你进行更改 3.如下图代表app连接的端口: 4.关于sql过滤 ...

  6. HTML页面如何判断是手机访问还是电脑访问

    可以通过js来判断访问设备,代码如下: <script type="text/javascript"> var system ={}; var p = navigato ...

  7. php如何判断是手机访问还是电脑访问

    <?php function isMobile(){ $useragent=isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AG ...

  8. JS判断是手机访问还是PC端访问网站

    <script>    if ((navigator.userAgent.match(/(iPhone|iPod|Android|ios|iOS|iPad|Backerry|WebOS|S ...

  9. js判断是手机访问还是电脑访问

    <script type="text/javascript">        <!--        //平台.设备和操作系统         var syste ...

随机推荐

  1. jquery实现nav的下拉

    <script type="text/javascript"> $(function(){ //tab_flag 根据此标记判断是否由父级nav指向了nav_list ...

  2. dns服务

    http://33024.blog.163.com/blog/static/12307042220119179237568/

  3. ORM系列之一:Dos.ORM

    阅读目录 引言 1.为什么使用Dos.ORM 2.配置 3.开始使用 3.1. 物理表 3.2. 实体类 3.3. 使用方法 引言 Dos.ORM(原名Hxj.Data)于2009年发布,2015年正 ...

  4. c# 对于批量表的统一查询 WM_CONCAT行列转换行数

    //需要显示的列                sql = string.Format(@"                                      SELECT  WM_ ...

  5. windows2003安装TestDirector8.0 安装时输入用户名密码 提示错误

    1.TestDirector8.0的安装过程 2.修改错误 右键“我的电脑”->“属性”->"高级"->性能对应的"设置"->" ...

  6. windows的Timer和写文件方式串口注意!

    1.Timer要读取并分发消息,才能触发自定义回调函数 SetTimer(NULL, 1, 40, (TIMERPROC)TimerProc); while(GetMessage(&msg, ...

  7. UIWebView通过JS语句获取网页(html)的某些数值

    //To get string from the title of the HTML page: NSString *currentURL = [theWebView stringByEvaluati ...

  8. Java 类加载机制

    类的加载: 类的初始化: 类什么时候才被初始化:1)创建类的实例,也就是new一个对象2)访问某个类或接口的静态变量,或者对该静态变量赋值3)调用类的静态方法4)反射(Class.forName(&q ...

  9. Map的简单语法

    package jaxpsax; import java.util.Collection; import java.util.HashMap; import java.util.Iterator; i ...

  10. RDIFramework.NET ━ 9.16 案例模块━ Web部分

    RDIFramework.NET ━ .NET快速信息化系统开发框架 9.15  案例模块 -Web部分 9.16.1.产品管理模块 产品管理模块提供了基本的增.删.改.查.导出.分页等的实现,用户可 ...