Rumah  >  Artikel  >  pembangunan bahagian belakang  >  php判断是否wap手机客户端的方法详解

php判断是否wap手机客户端的方法详解

WBOY
WBOYasal
2016-07-25 08:56:211116semak imbas
  1. // 如果有HTTP_X_WAP_PROFILE则一定是移动设备
  2. if (isset($_SERVER['HTTP_X_WAP_PROFILE'])) {
  3. return true;
  4. }
复制代码

分析: 通过获到客户端返回的HTTP_X_WAP_PROFILE信息,可以判断一定是手机终端,但是并不是所有手机都能返回这个信息,这个和等下的获取via是一样的,这涉及到终端和服务商问题! 代码:

  1. //如果via信息含有wap则一定是移动设备,部分服务商会屏蔽该信息
  2. if(isset($_SERVER['HTTP_VIA']))
  3. {
  4. //找不到为flase,否则为true
  5. return stristr($_SERVER['HTTP_VIA'],"wap") ? true : false;
  6. }
复制代码

分析: 这个HTTP_VIA里面,包含有服务商提供一些个人信息,如果由这个去判断是最为准确的,但是比如说移动就屏蔽了这个信息。因此,只对部分服务商有效。 代码:

  1. //脑残法,判断手机发送的客户端标志,兼容性有待提高
  2. if(isset($_SERVER['HTTP_USER_AGENT']))
  3. {
  4. $clientkeywords = array('nokia','sony','ericsson','mot','samsung',
  5. 'htc','sgh','lg','sharp','sie-','philips','panasonic','alcatel',
  6. 'lenovo','iphone','ipod','blackberry','meizu','android','netfront',
  7. 'symbian','ucweb','windowsce','palm','operamini','operamobi',
  8. 'openwave','nexusone','cldc','midp','wap','mobile');
  9. // 从HTTP_USER_AGENT中查找手机浏览器的关键字
  10. if (preg_match("/(".implode('|',$clientkeywords).")/i",
  11. strtolower($_SERVER['HTTP_USER_AGENT'])))
  12. {
  13. return true;
  14. }
  15. }
复制代码

分析: 这个通过客户端返回信息[HTTP_USER_AGENT]来配置手机终端关键字。试想下,要列出所有的手机标识,才能准确判断,这个可行吗?所以,只要列举主流的手机品牌,这样就基本上OK了。不过,上在的代码有一个是判断ucweb的,这个是判断不了的。

因为,我获取到的信息和获取firefox的信息是一致的,也找不到ucweb的关键字。 所以使用ucweb浏览器就无法进行判断,有待新方法出现。 毕竟,ucweb占用绝大部分用户,但是ucweb是以pc浏览器标准靠拢的,因些被误认为是pc浏览器也可以吧! 代码:

  1. //协议法,因为有可能不准确,放到最后判断
  2. if (isset($_SERVER['HTTP_ACCEPT'])) {
  3. // 如果只支持wml并且不支持html那一定是移动设备
  4. // 如果支持wml和html但是wml在html之前则是移动设备
  5. if ((strpos($_SERVER['HTTP_ACCEPT'], 'vnd.wap.wml') !== false)
  6. && (strpos($_SERVER['HTTP_ACCEPT'], 'text/html') === false
  7. || (strpos($_SERVER['HTTP_ACCEPT'], 'vnd.wap.wml')
  8. {
  9. return true;
  10. }
  11. }
复制代码

分析: 最后就是协议,也不是什么协议了。就是mime类型判断,只接收wml页面的手机,不用说一定是移动终端,但是这么天真的想法是不可能的。因为,现在手机都渐渐可以和电脑的功能接近了!?浏览器上可接受的页面类型也不只是wml,html也同样支持。接收wml排在html前面,这个可以说也是手机,但不是绝对。比如说,蓝莓就是html排在前,wml排在后面。这样就无法做出判断了。

综上所述,就写出下面的php判断页面程序。

  1. /**
  2. *程 序:iswap.php判断是否是通过手机访问
  3. *程序返回:@return bool 是否是移动设备
  4. */
  5. function isMobile()
  6. {
  7. // 如果有HTTP_X_WAP_PROFILE则一定是移动设备
  8. if (isset($_SERVER['HTTP_X_WAP_PROFILE'])) {
  9. return true;
  10. }
  11. //如果via信息含有wap则一定是移动设备,部分服务商会屏蔽该信息
  12. if(isset($_SERVER['HTTP_VIA']))
  13. {
  14. //找不到为flase,否则为true
  15. return stristr($_SERVER['HTTP_VIA'],"wap") ? true : false;
  16. }
  17. //脑残法,判断手机发送的客户端标志,兼容性有待提高
  18. if(isset($_SERVER['HTTP_USER_AGENT']))
  19. {
  20. $clientkeywords = array('nokia','sony','ericsson','mot','samsung',
  21. 'htc','sgh','lg','sharp','sie-','philips','panasonic','alcatel',
  22. 'lenovo','iphone','ipod','blackberry','meizu','android','netfront',
  23. 'symbian','ucweb','windowsce','palm','operamini','operamobi',
  24. 'openwave','nexusone','cldc','midp','wap','mobile');
  25. // 从HTTP_USER_AGENT中查找手机浏览器的关键字
  26. if (preg_match("/(".implode('|',$clientkeywords).")/i",
  27. strtolower($_SERVER['HTTP_USER_AGENT'])))
  28. {
  29. return true;
  30. }
  31. }
  32. //协议法,因为有可能不准确,放到最后判断
  33. if (isset($_SERVER['HTTP_ACCEPT'])) {
  34. // 如果只支持wml并且不支持html那一定是移动设备
  35. // 如果支持wml和html但是wml在html之前则是移动设备
  36. if ((strpos($_SERVER['HTTP_ACCEPT'], 'vnd.wap.wml') !== false)
  37. && (strpos($_SERVER['HTTP_ACCEPT'], 'text/html') === false
  38. || (strpos($_SERVER['HTTP_ACCEPT'], 'vnd.wap.wml')
  39. {
  40. return true;
  41. }
  42. }
  43. return false;
  44. }
  45. ?>
复制代码


Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn