Maison  >  Article  >  développement back-end  >  L'implémentation PHP détermine le type de client

L'implémentation PHP détermine le type de client

墨辰丷
墨辰丷original
2018-05-31 17:27:091832parcourir

Cet article présente principalement la méthode PHP pour déterminer si le client est un PC ou un téléphone portable, qui peut être utilisée par le site pour des statistiques. Les amis qui ont besoin d'en savoir plus peuvent s'y référer.

Lors de la collecte de statistiques sur les données des utilisateurs d'un site Web, nous avons souvent besoin d'obtenir le type de navigateur et le type de système d'exploitation de l'utilisateur. Cet article explique principalement comment déterminer le type de client en fonction de PHP. Les amis dans le besoin peuvent venir se renseigner. .

Méthode 1 :

/**
 * 
 * 根据php的$_SERVER['HTTP_USER_AGENT'] 中各种浏览器访问时所包含各个浏览器特定的字符串来判断是属于PC还是移动端
 * @author      discuz3x
 * @lastmodify  2014-04-09
 * @return BOOL
 */
function checkmobile() {
 global $_G;
 $mobile = array();
//各个触控浏览器中$_SERVER['HTTP_USER_AGENT']所包含的字符串数组
 static $touchbrowser_list =array('iphone', 'android', 'phone', 'mobile', 'wap', 'netfront', 'java', 'opera mobi', 'opera mini',
  'ucweb', 'windows ce', 'symbian', 'series', 'webos', 'sony', 'blackberry', 'dopod', 'nokia', 'samsung',
  'palmsource', 'xda', 'pieplus', 'meizu', 'midp', 'cldc', 'motorola', 'foma', 'docomo', 'up.browser',
  'up.link', 'blazer', 'helio', 'hosin', 'huawei', 'novarra', 'coolpad', 'webos', 'techfaith', 'palmsource',
  'alcatel', 'amoi', 'ktouch', 'nexian', 'ericsson', 'philips', 'sagem', 'wellcom', 'bunjalloo', 'maui', 'smartphone',
  'iemobile', 'spice', 'bird', 'zte-', 'longcos', 'pantech', 'gionee', 'portalmmm', 'jig browser', 'hiptop',
  'benq', 'haier', '^lct', '320x320', '240x320', '176x220');
//window手机浏览器数组【猜的】
 static $mobilebrowser_list =array('windows phone');
//wap浏览器中$_SERVER['HTTP_USER_AGENT']所包含的字符串数组
 static $wmlbrowser_list = array('cect', 'compal', 'ctl', 'lg', 'nec', 'tcl', 'alcatel', 'ericsson', 'bird', 'daxian', 'dbtel', 'eastcom',
  'pantech', 'dopod', 'philips', 'haier', 'konka', 'kejian', 'lenovo', 'benq', 'mot', 'soutec', 'nokia', 'sagem', 'sgh',
  'sed', 'capitel', 'panasonic', 'sonyericsson', 'sharp', 'amoi', 'panda', 'zte');
 $pad_list = array('pad', 'gt-p1000');
 $useragent = strtolower($_SERVER['HTTP_USER_AGENT']);
 if(dstrpos($useragent, $pad_list)) {
 return false;
 }
 if(($v = dstrpos($useragent, $mobilebrowser_list, true))){
 $_G['mobile'] = $v;
 return '1';
 }
 if(($v = dstrpos($useragent, $touchbrowser_list, true))){
 $_G['mobile'] = $v;
 return '2';
 }
 if(($v = dstrpos($useragent, $wmlbrowser_list))) {
 $_G['mobile'] = $v;
 return '3'; //wml版
 }
 $brower = array('mozilla', 'chrome', 'safari', 'opera', 'm3gate', 'winwap', 'openwave', 'myop');
 if(dstrpos($useragent, $brower)) return false;
 $_G['mobile'] = 'unknown';
//对于未知类型的浏览器,通过$_GET['mobile']参数来决定是否是手机浏览器
 if(isset($_G['mobiletpl'][$_GET['mobile']])) {
 return true;
 } else {
 return false;
 }
}
/**
 * 判断$arr中元素字符串是否有出现在$string中
 * @param $string   $_SERVER['HTTP_USER_AGENT'] 
 * @param $arr     各中浏览器$_SERVER['HTTP_USER_AGENT']中必定会包含的字符串
 * @param $returnvalue 返回浏览器名称还是返回布尔值,true为返回浏览器名称,false为返回布尔值【默认】
 * @author      discuz3x
 * @lastmodify  2014-04-09
 */
function dstrpos($string, $arr, $returnvalue = false) {
 if(empty($string)) return false;
 foreach((array)$arr as $v) {
 if(strpos($string, $v) !== false) {
  $return = $returnvalue ? $v : true;
  return $return;
 }
 }
 return false;
}

Méthode 2 :

<?php
function isMobile()
{ 
  // 如果有HTTP_X_WAP_PROFILE则一定是移动设备
  if (isset ($_SERVER[&#39;HTTP_X_WAP_PROFILE&#39;]))
  {
    return true;
  } 
  // 如果via信息含有wap则一定是移动设备,部分服务商会屏蔽该信息
  if (isset ($_SERVER[&#39;HTTP_VIA&#39;]))
  { 
    // 找不到为flase,否则为true
    return stristr($_SERVER[&#39;HTTP_VIA&#39;], "wap") ? true : false;
  } 
  // 脑残法,判断手机发送的客户端标志,兼容性有待提高
  if (isset ($_SERVER[&#39;HTTP_USER_AGENT&#39;]))
  {
    $clientkeywords = array (&#39;nokia&#39;,
      &#39;sony&#39;,
      &#39;ericsson&#39;,
      &#39;mot&#39;,
      &#39;samsung&#39;,
      &#39;htc&#39;,
      &#39;sgh&#39;,
      &#39;lg&#39;,
      &#39;sharp&#39;,
      &#39;sie-&#39;,
      &#39;philips&#39;,
      &#39;panasonic&#39;,
      &#39;alcatel&#39;,
      &#39;lenovo&#39;,
      &#39;iphone&#39;,
      &#39;ipod&#39;,
      &#39;blackberry&#39;,
      &#39;meizu&#39;,
      &#39;android&#39;,
      &#39;netfront&#39;,
      &#39;symbian&#39;,
      &#39;ucweb&#39;,
      &#39;windowsce&#39;,
      &#39;palm&#39;,
      &#39;operamini&#39;,
      &#39;operamobi&#39;,
      &#39;openwave&#39;,
      &#39;nexusone&#39;,
      &#39;cldc&#39;,
      &#39;midp&#39;,
      &#39;wap&#39;,
      &#39;mobile&#39;
      ); 
    // 从HTTP_USER_AGENT中查找手机浏览器的关键字
    if (preg_match("/(" . implode(&#39;|&#39;, $clientkeywords) . ")/i", strtolower($_SERVER[&#39;HTTP_USER_AGENT&#39;])))
    {
      return true;
    } 
  } 
  // 协议法,因为有可能不准确,放到最后判断
  if (isset ($_SERVER[&#39;HTTP_ACCEPT&#39;]))
  { 
    // 如果只支持wml并且不支持html那一定是移动设备
    // 如果支持wml和html但是wml在html之前则是移动设备
    if ((strpos($_SERVER[&#39;HTTP_ACCEPT&#39;], &#39;vnd.wap.wml&#39;) !== false) && (strpos($_SERVER[&#39;HTTP_ACCEPT&#39;], &#39;text/html&#39;) === false || (strpos($_SERVER[&#39;HTTP_ACCEPT&#39;], &#39;vnd.wap.wml&#39;) < strpos($_SERVER[&#39;HTTP_ACCEPT&#39;], &#39;text/html&#39;))))
    {
      return true;
    } 
  } 
  return false;
} 
?>

Déterminer si le téléphone mobile est IOS ou Android

Le code est le suivant :

/**
 * 判断是否手机访问
 */
function is_mobile()
{
  static $is_mobile;
  if (isset($is_mobile)) return $is_mobile;
  if (empty($_SERVER[&#39;HTTP_USER_AGENT&#39;])) {
    $is_mobile = false;
  } elseif (strpos($_SERVER[&#39;HTTP_USER_AGENT&#39;], &#39;Mobile&#39;) !== false // many mobile devices (all iPhone, iPad, etc.)
    || strpos($_SERVER[&#39;HTTP_USER_AGENT&#39;], &#39;Android&#39;) !== false
    || strpos($_SERVER[&#39;HTTP_USER_AGENT&#39;], &#39;Silk/&#39;) !== false
    || strpos($_SERVER[&#39;HTTP_USER_AGENT&#39;], &#39;Kindle&#39;) !== false
    || strpos($_SERVER[&#39;HTTP_USER_AGENT&#39;], &#39;BlackBerry&#39;) !== false
    || strpos($_SERVER[&#39;HTTP_USER_AGENT&#39;], &#39;Opera Mini&#39;) !== false
    || strpos($_SERVER[&#39;HTTP_USER_AGENT&#39;], &#39;Opera Mobi&#39;) !== false
  ) {
    $is_mobile = true;
  } else {
    $is_mobile = false;
  }
  return $is_mobile;
}

Résumé : Ce qui précède représente l'intégralité du contenu de cet article, j'espère qu'il sera utile à l'étude de chacun.

Recommandations associées :

Comment télécharger des images avec PHP

php curl request https

phpGénérer un fichier csv

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn