PHP 判断移动设备的函数isMobile()

不废话上代码,使用方法就是:

  1. <?php
  2. if(isMobile()){}
  3. if(!isMobile()){}
  4. ?>
  5. function isMobile() {
  6. $user_agent = $_SERVER['HTTP_USER_AGENT'];
  7. $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");
  8. $is_mobile = false;
  9. foreach ($mobile_agents as $device) {
  10. if (stristr($user_agent, $device)) {
  11. $is_mobile = true;
  12. break;
  13. }
  14. }
  15. return $is_mobile;
  16. }

网友补充了一个:

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

国外人喜欢写类,有一个Mobile Detect,Mobile_Detect 简单使用实例:

  1. include 'Mobile_Detect.php';
  2. $detect = new Mobile_Detect();
  3. // Check for any mobile device.
  4. if ($detect->isMobile())
  5. // Check for any tablet.
  6. if($detect->isTablet())
  7. // Check for any mobile device, excluding tablets.
  8. if ($detect->isMobile() && !$detect->isTablet())
  9. if ($detect->isMobile() && !$detect->isTablet())
  10. // Alternative to $detect->isAndroidOS()
  11. $detect->is('AndroidOS');
  12. // Batch usage
  13. foreach($userAgents as $userAgent){
  14. $detect->setUserAgent($userAgent);
  15. $isMobile = $detect->isMobile();
  16. //phpfensi.com
  17. }
  18. // Version check.
  19. $detect->version('iPad'); // 4.3 (float)