搜尋
首頁後端開發php教程怎么判断访问端是电脑还是手机?_PHP教程
怎么判断访问端是电脑还是手机?_PHP教程Jul 13, 2016 am 10:35 AM
判斷傳送基於怎麼智慧型手機瀏覽器現在電腦觀點訪問還是

   网上现在有三种观点, 一种是基于浏览器发送的 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 就足够了.

  以上是我今天上午的工作成果, 但实际上还是没有找到完美的解决方案, 先写这么多, 有问题请补充或者发送消息给我, 如果你有更好的办法希望可以分享给我, 谢谢.

  最近做一个手机查询系统,自然就牵扯到了此问题,那我就根据对wap的认识浅谈下通过php判断用户访问方式是通过wap访问还是电脑直接访问。

  首先说最根本的解决方法:

  手 机访问时,会附带发送user-agent信息,这个信息里面会有手机号码信息,那么如果能取得手机号码,则可以肯定是通过手机wap访问的。但是目前中 国移动已经屏蔽了user-agent信息,所以获取不到手机号码。有关系的朋友可以联系移动公司,把wap网站服务器的ip提交给中国移动,加入白名单 后即可取得ua信息。目前中国联通可以直接取到手机号,对联通用户此方案可完美实施。

  接下来说我的解决方案:

  手机访问,原理是手机通过移动公司的代理服务器进行的访问。那么我们就可以理解是一台普通电脑使用了代理服务器。当手机通过代理服务器访问的时候,http头信息会毫无疑问的包含一个信息:via。这个信息提供了有价值的判断信息。

  例如河南移动取得的via信息是:

  http/1.1 hazz-b-gw001-wap(infox-wisg, huawei technologies)

  河南联通的via信息是:

  zxwap gateway,zte technologies

  其他各省的http头信息和这个大同小异,判断是否手机访问的方案就出来 了:获取http的via信息字符串看是否包含wap字符,如果有则是通过手机访问。这样做的结果是没有人能伪造手机访问,判断绝对准确。自然,这样对于 网上流行的手机wap模拟器也做了屏蔽—-从根本上屏蔽。

  操作代码也很简单:

  // check if wap by xhat

  function check_wap() {

  return stristr($_SERVER['HTTP_VIA'],"wap") ? true : false;

  }

  // check over

  从我查阅的资料来看,目前此方法应该是迄今互联网上准确率最高、最简单的判断手机访问方法。

  以上的方法可以实现判断访问来源是手机还是电脑,但有一个问题就是,只能通过手机才能访问,支持WAP的浏览器和手机模拟器也不能访问,这给测试带来了麻烦,也有点限制死了。

  下面的方案是:

  通过判断浏览器代理标识符,判断是否是支持WAP的浏览器来决定访问页面。这有一个缺点就是不可能全部的列出所有手机的浏览器标识符与所支持的浏览器标识符。

  下面看看实现的代码:

  function check_wap()

  {

  if (strpos(strtoupper($_SERVER['HTTP_ACCEPT']),"VND.WAP.WML") > 0)

  {

  // Check whether the browser/gateway says it accepts WML.

  $br = "WML";

  }

  else

  {

  $browser=substr(trim($_SERVER['HTTP_USER_AGENT']),0,4);

  if ($browser=="Noki" || // Nokia phones and emulators

  $browser=="Eric" || // Ericsson WAP phones and emulators

  $browser=="WapI" || // Ericsson WapIDE 2.0

  $browser=="MC21" || // Ericsson MC218

  $browser=="AUR" || // Ericsson R320

  $browser=="R380" || // Ericsson R380

  $browser=="UP.B" || // UP.Browser

  $browser=="WinW" || // WinWAP browser

  $browser=="UPG1" || // UP.SDK 4.0

  $browser=="upsi" || // another kind of UP.Browser ??

  $browser=="QWAP" || // unknown QWAPPER browser

  $browser=="Jigs" || // unknown JigSaw browser

  $browser=="Java" || // unknown Java based browser

  $browser=="Alca" || // unknown Alcatel-BE3 browser (UP based?)

  $browser=="MITS" || // unknown Mitsubishi browser

  $browser=="MOT-" || // unknown browser (UP based?)

  $browser=="My S" ||// unknown Ericsson devkit browser ?

  $browser=="WAPJ" || // Virtual WAPJAG www.wapjag.de

  $browser=="fetc" || // fetchpage.cgi Perl script from www.wapcab.de

  $browser=="ALAV" || // yet another unknown UP based browser ?

  $browser=="Wapa" || // another unknown browser (Web based "Wapalyzer"?)

  $browser=="Oper") // Opera

  {

  $br = "WML";

  }

  else

  {

  $br = "HTML";

  }

  }

  if($br == "WML")

  {

  return TRUE;

  }

  else

  {

  return FALSE;

  }

  }

  if(!check_wap())

  {

  Header("Location: http://www.xker.com/");

  exit();

  }

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/747073.htmlTechArticle网上现在有三种观点, 一种是基于浏览器发送的 User-Agent, 但明显这种方法是行不通的, 虽然有人列出了大多数的手机发送的User-Agent, 但依然...
陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
如何在技嘉主板上设置键盘启动功能 (技嘉主板启用键盘开机方式)如何在技嘉主板上设置键盘启动功能 (技嘉主板启用键盘开机方式)Dec 31, 2023 pm 05:15 PM

技嘉的主板怎么设置键盘开机首先,要支持键盘开机,一定是PS2键盘!!设置步骤如下:第一步:开机按Del或者F2进入bios,到bios的Advanced(高级)模式普通主板默认进入主板的EZ(简易)模式,需要按F7切换到高级模式,ROG系列主板默认进入bios的高级模式(我们用简体中文来示范)第二步:选择到——【高级】——【高级电源管理(APM)】第三步:找到选项【由PS2键盘唤醒】第四步:这个选项默认是Disabled(关闭)的,下拉之后可以看到三种不同的设置选择,分别是按【空格键】开机、按组

使用java的File.isDirectory()函数判断文件是否存在且为目录类型使用java的File.isDirectory()函数判断文件是否存在且为目录类型Jul 24, 2023 pm 06:57 PM

使用java的File.isDirectory()函数判断文件是否存在且为目录类型在Java编程中,经常会遇到需要判断一个文件是否存在且为目录类型的情况。Java提供了File类来操作文件和目录,其中的isDirectory()函数可以帮助我们判断一个文件是否是目录类型。File.isDirectory()函数是File类中的一个方法,其作用是判断当前Fil

Win11如何回退版本?Win11如何回退版本?Jun 30, 2023 pm 05:21 PM

Win11怎么退版本?很多朋友在升级了win11后认为其不好用,那么大家可以选择退回之前的版本哦。那么你知道该如何操作嘛?很多用户都不知道,其实方法并不难,下面小编给大家带来退回Win10的方法分享,一起来学习吧。退回Win10的方法分享1、进入“设置”。2、选择“WindowsUpdate”,然后点击“恢复”。3、在“恢复选项”中选择“以前版本的Windows”,点击“返回”。4、选择原因,然后点击“下一步”。5、你将看到“检查更新”的通知,选择“不,谢谢”。6、阅读需要了解的内容,然后点击“

神舟炫龙m7e8s3如何启用独立显卡直连?神舟炫龙m7e8s3如何启用独立显卡直连?Jan 04, 2024 am 09:24 AM

神舟炫龙m7独显直连怎么开要开启神舟炫龙m7的独立显卡直连功能,您可以按照以下步骤进行操作:1.首先,确保您已经安装好了独立显卡的驱动程序。您可以前往神舟官方网站或独立显卡厂商官网下载并安装适合您显卡型号的最新驱动程序。2.在电脑桌面上,右键单击空白处,在弹出的菜单中选择“NVIDIA控制面板”(如果是AMD显卡,则选择“AMDRadeon设置”)。3.在控制面板中,找到“3D设置”或类似命名的选项,点击进入。4.在“3D设置”中,您需要找到“全局设置”或类似命名的选项。在这里,您可以指定使用独

使用java的Character.isDigit()函数判断字符是否为数字使用java的Character.isDigit()函数判断字符是否为数字Jul 27, 2023 am 09:32 AM

使用Java的Character.isDigit()函数判断字符是否为数字字符在计算机内部以ASCII码的形式表示,每个字符都有一个对应的ASCII码。其中,数字字符0到9分别对应的ASCII码值为48到57。要判断一个字符是否为数字,可以使用Java中的Character类提供的isDigit()方法进行判断。isDigit()方法是Character类的

如何辨别耐克鞋子的真假鞋盒(掌握一招轻松识别)如何辨别耐克鞋子的真假鞋盒(掌握一招轻松识别)Sep 02, 2024 pm 04:11 PM

耐克作为全球知名的运动品牌,其鞋子备受瞩目。然而,市场上也存在大量的假冒伪劣商品,其中就包括假冒的耐克鞋盒。辨别真假鞋盒对于保护消费者的权益至关重要。本文将为您提供一些简单而有效的方法,以帮助您辨别真假鞋盒。一:外包装标题通过观察耐克鞋盒的外包装,可以发现许多细微的差异。真正的耐克鞋盒通常具有高品质的纸质材料,手感光滑,且没有明显的刺激性气味。正品鞋盒上的字体和标志通常清晰、精细,并且没有模糊或颜色不协调的情况。二:LOGO烫金标题耐克鞋盒上的LOGO通常是烫金工艺,真品鞋盒上的烫金部分会呈现出

拯救者y7000p玩cf分辨率多少(拯救者y7000玩cf怎么调全屏)拯救者y7000p玩cf分辨率多少(拯救者y7000玩cf怎么调全屏)Jan 07, 2024 am 10:13 AM

拯救者y7000p玩cf分辨率多少拯救者Y7000P玩CF的分辨率为1920*1080。因为该电脑配备了GTX1650显卡和i5-9300H处理器,性能较为优秀,足以满足CF这类游戏的需求。同时,1920*1080是目前主流电竞显示器的分辨率,画质清晰度足够。另外,如果有更高要求的玩家,可以适当降低游戏画质的设置,以获得更加流畅的游戏体验。为了享受更清晰的视觉体验,你可以将拯救者y7000p的分辨率调整为2560*1400。这样,你将能够享受到更高质量的图像显示。拯救者Y7000P2022款搭载

如何使用Double类的isInfinite()方法判断一个数是否为无穷大如何使用Double类的isInfinite()方法判断一个数是否为无穷大Jul 24, 2023 am 10:10 AM

如何使用Double类的isInfinite()方法判断一个数是否为无穷大在Java中,Double类是用来表示浮点数的包装类。该类提供了一系列方法,可以方便地对浮点数进行操作。其中,isInfinite()方法就是用来判断一个浮点数是否为无穷大的方法。无穷大是指大到超出了浮点数所能表示的范围的正无穷和负无穷。在计算机中,浮点数的最大值可以通过Double类

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前By尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前By尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
4 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

MantisBT

MantisBT

Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

SublimeText3 英文版

SublimeText3 英文版

推薦:為Win版本,支援程式碼提示!

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

將Eclipse與SAP NetWeaver應用伺服器整合。

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具