php网站判断用户是否是手机访问的方法

php网站判断用户是否是手机访问的方法

有些时候,我们需要判断用户是否用手机访问,如果是手机的话,就跳转到指定的手机友好页面。这里就介绍一下,如何判断用户是否用手机访问。

 

自定义的函数如下:

$agent = check_wap();
if( $agent )
{
  header('Location: http://www.jb51.net');
  exit;
}
  
// check if wap
function check_wap(){
  // 先检查是否为wap代理,准确度高
  if(stristr($_SERVER['HTTP_VIA'],"wap")){
    return true;
  }
  // 检查浏览器是否接受 WML.
  elseif(strpos(strtoupper($_SERVER['HTTP_ACCEPT']),"VND.WAP.WML") > 0){
    return true;
  }
  //检查USER_AGENT
  elseif(preg_match('/(blackberry|configuration\/cldc|hp |hp-|htc |htc_|htc-|iemobile|kindle|midp|mmp|motorola|mobile|nokia|opera mini|opera |Googlebot-Mobile|YahooSeeker\/M1A1-R2D2|android|iphone|ipod|mobi|palm|palmos|pocket|portalmmm|ppc;|smartphone|sonyericsson|sqh|spv|symbian|treo|up.browser|up.link|vodafone|windows ce|xda |xda_)/i', $_SERVER['HTTP_USER_AGENT'])){
    return true;      
  }
  else{
    return false; 
  }
}

 

   

再来一个从PHP框架剥离的判断是否为手机移动终端的函数:(经过测试,很全面,推荐使用)

function is_mobile_request() 
{ 
 $_SERVER['ALL_HTTP'] = isset($_SERVER['ALL_HTTP']) ? $_SERVER['ALL_HTTP'] : ''; 
 $mobile_browser = '0'; 
 if(preg_match('/(up.browser|up.link|mmp|symbian|smartphone|midp|wap|phone|iphone|ipad|ipod|android|xoom)/i', strtolower($_SERVER['HTTP_USER_AGENT']))) 
  $mobile_browser++; 
 if((isset($_SERVER['HTTP_ACCEPT'])) and (strpos(strtolower($_SERVER['HTTP_ACCEPT']),'application/vnd.wap.xhtml+xml') !== false)) 
  $mobile_browser++; 
 if(isset($_SERVER['HTTP_X_WAP_PROFILE'])) 
  $mobile_browser++; 
 if(isset($_SERVER['HTTP_PROFILE'])) 
  $mobile_browser++; 
 $mobile_ua = strtolower(substr($_SERVER['HTTP_USER_AGENT'],0,4)); 
 $mobile_agents = array( 
    'w3c ','acs-','alav','alca','amoi','audi','avan','benq','bird','blac', 
    'blaz','brew','cell','cldc','cmd-','dang','doco','eric','hipt','inno', 
    'ipaq','java','jigs','kddi','keji','leno','lg-c','lg-d','lg-g','lge-', 
    'maui','maxo','midp','mits','mmef','mobi','mot-','moto','mwbp','nec-', 
    'newt','noki','oper','palm','pana','pant','phil','play','port','prox', 
    'qwap','sage','sams','sany','sch-','sec-','send','seri','sgh-','shar', 
    'sie-','siem','smal','smar','sony','sph-','symb','t-mo','teli','tim-', 
    'tosh','tsm-','upg1','upsi','vk-v','voda','wap-','wapa','wapi','wapp', 
    'wapr','webc','winw','winw','xda','xda-'
    ); 
 if(in_array($mobile_ua, $mobile_agents)) 
  $mobile_browser++; 
 if(strpos(strtolower($_SERVER['ALL_HTTP']), 'operamini') !== false) 
  $mobile_browser++; 
 // Pre-final check to reset everything if the user is on Windows 
 if(strpos(strtolower($_SERVER['HTTP_USER_AGENT']), 'windows') !== false) 
  $mobile_browser=0; 
 // But WP7 is also Windows, with a slightly different characteristic 
 if(strpos(strtolower($_SERVER['HTTP_USER_AGENT']), 'windows phone') !== false) 
  $mobile_browser++; 
 if($mobile_browser>0) 
  return true; 
 else
  return false;

 

   
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/113581.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 安卓dtmf识别_使用Goertzel算法识别DTMF信号

    安卓dtmf识别_使用Goertzel算法识别DTMF信号Goertzel算法Goertzel算法由GeraldGoertzel在1958年提出,用于数字信号处理,是属于离散傅里叶变换的范畴,目的是从给定的采样中求出某一特定频率信号的能量,用于有效性的评价。这个算法有几个关键的参数:采样率R,指的是需要分析的数据每秒钟有多少个采样目标频率f,指的是需要检测并评价的这个频率的值检测区段采样值数量N,也就是每N个采样这个算法会对频率f给出评价检测区段包含目…

    2025年5月28日
    2
  • Java类的初始化顺序_java静态类初始化顺序

    Java类的初始化顺序_java静态类初始化顺序package com.qcby;public class InitializeDemo { private static int k = 1; private static InitializeDemo t1 = new InitializeDemo(“t1”); private static InitializeDemo t2 = new InitializeDemo(“t2”); private static int i = print(“i”); pri

    2022年8月8日
    6
  • matlab画对数直方图,matlab中函数bar绘制直方图「建议收藏」

    matlab画对数直方图,matlab中函数bar绘制直方图「建议收藏」matlab中函数bar绘制直方图中的应用函数bar(x)可以绘制直方图,这对统计或者数据采集非常直观实用。它共有四种形式:bar,bar3,barh和bar3h,其中bar和bar3分别用来绘制二维和三维竖直方图,barh和bar3h分别用来绘制二维和三维水平直方图,调用格式是:bar(x,y)其中x必须单调递增或递减,y为nm×矩阵,可视化结果为m组,每组n个垂直柱,也就…

    2022年10月11日
    1
  • ConnectionString 属性尚未初始化「建议收藏」

    ConnectionString 属性尚未初始化「建议收藏」关于“ConnectionString属性尚未初始化”的问题(如下图),我在下面一段代码中发现了问题所在:publicboolReturnFlag(stringstrSQL){Chec

    2022年7月1日
    27
  • ECharts介绍及使用方法

    ECharts介绍及使用方法前面做项目时用到ECharts,今天特此整理一下,作为笔记,同时希望帮助更多人。首先简单介绍一下,ECharts是一个纯JavaScript图表库,底层依赖于轻量级的Canvas类库ZRender,基于BSD开原协议,是一款非常优秀的可视化前端框架。官网地址:http://echarts.baidu.com/1.首先在官网选择合适的下载版本http://echart…

    2022年6月12日
    41
  • matlab怎么定义矩阵函数,MATLAB数组的常用函数

    3进行数组运算的常用函数在MATLAB中有一些常用函数,这些函数在日常的编程计算过程中会经常遇到,一般是基本的数学概念在MATLAB中的函数表达方式。这些函数在MATLAB中可以同时作用于整个矩阵或者数组,应用起来非常方便,不需要再另写循环程序来对各元素分别进行计算。掌握这些函数是进一步学习的基础。MATLAB人性化的地方在于其自带函数基本是按照相对应的英文名称缩写而来,所以便于记忆。3.1…

    2022年4月8日
    85

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号