PHP获取客户端相关访问信息

(一)PHP通过IP获取客户端相关访问信息

/**
 * 通过IP获取客户端相关访问信息
 * @param $ip IP
 * @return array
 */
function getClientIPInfo($ip = ''){
    if(!$ip){
        return false;
    }
    $ipContent   = file_get_contents("http://ip.taobao.com/service/getIpInfo.php?ip=$ip");      
    $jsonData = json_decode($ipContent, true);
    if(0 != $jsonData['code']){
        return false;
    }
    $IPinfo = $jsonData['data'];
    return $IPinfo;
}
//获取用户真实ip
function get_user_ip(){
    global $ip;
    
    if (getenv("HTTP_CLIENT_IP"))
        $ip = getenv("HTTP_CLIENT_IP");
    elseif(getenv("HTTP_X_FORWARDED_FOR"))
        $ip = getenv("HTTP_X_FORWARDED_FOR");
    elseif(getenv("REMOTE_ADDR"))
        $ip = getenv("REMOTE_ADDR");
    else $ip = "Unknow";
 
    return $ip;
}

(二)PHP解析HTTP_USER_AGENT 获取客户端操作系统

获取客户端操作系统 

Windows NT 4.0 = NT 4.0
Windows 2000 = NT 5.0
Windows XP = NT 5.1
Windows Vista = NT 6.0 
Windows 7 = NT 6.1
Windows 8 = NT 6.2
Windows 8.1 = NT 6.3
Windows 10 = NT 10.0


/**
 * 获取客户端操作系统
 * @param $agent    //$_SERVER['HTTP_USER_AGENT']
 * @return array[os]            操作系统名称
 * @return array[os_ver]        操作系统版本号
 * @return array[equipment]     终端设备类型
 */
function getClientOS($agent = ''){ 
        //window系统
        if (stripos($agent, 'window')) {
            $os = 'Windows';            
            $equipment = '电脑';            
            if (preg_match('/nt 6.0/i', $agent)) {
                $os_ver = 'Vista';
            }elseif(preg_match('/nt 10.0/i', $agent)) {
                $os_ver = '10';
            }elseif(preg_match('/nt 6.3/i', $agent)) {
                $os_ver = '8.1';
            }elseif(preg_match('/nt 6.2/i', $agent)) {
                $os_ver = '8.0';
            }elseif(preg_match('/nt 6.1/i', $agent)) {
                $os_ver = '7';
            }elseif(preg_match('/nt 5.1/i', $agent)) {
                $os_ver = 'XP';
            }elseif(preg_match('/nt 5/i', $agent)) {
                $os_ver = '2000';
            }elseif(preg_match('/nt 98/i', $agent)) {
                $os_ver = '98';
            }elseif(preg_match('/nt/i', $agent)) {
                $os_ver = 'nt';
            }else{
                $os_ver = '';
            }
            if (preg_match('/x64/i', $agent)) {
                $os .= '(x64)';
            }elseif(preg_match('/x32/i', $agent)){
                $os .= '(x32)';
            }
        }
        elseif(stripos($agent, 'linux')) {
            if (stripos($agent, 'android')) {
                preg_match('/android\s([\d\.]+)/i', $agent, $match);
                $os = 'Android';      
                $equipment = 'Mobile phone';      
                $os_ver = $match[1];
            }else{
                $os = 'Linux';
            }            
        }
        elseif(stripos($agent, 'unix')) {
            $os = 'Unix';
        }
        elseif(preg_match('/iPhone|iPad|iPod/i',$agent)) {
            preg_match('/OS\s([0-9_\.]+)/i', $agent, $match);
            $os = 'IOS';
            $os_ver = str_replace('_','.',$match[1]);
            if(preg_match('/iPhone/i',$agent)){
                $equipment = 'iPhone';  
            }elseif(preg_match('/iPad/i',$agent)){
                $equipment = 'iPad'; 
            }elseif(preg_match('/iPod/i',$agent)){
                $equipment = 'iPod'; 
            }
        }
        elseif(stripos($agent, 'mac os')) {
            preg_match('/Mac OS X\s([0-9_\.]+)/i', $agent, $match);
            $os = 'Mac OS X';
            $equipment = '电脑'; 
            $os_ver = str_replace('_','.',$match[1]);
        }
        else {
            $os = 'Other';
        }
        return ['os'=>$os, 'os_ver'=>$os_ver, 'equipment'=>$equipment];
}

这个参考  http://blog.sina.com.cn/s/blog_68b0cad1010169vr.html  这个博客改编,添加win8、win10

eregi =》stristr  eregi(此函数php5.3废弃,php7.0删除)

(三)PHP解析HTTP_USER_AGENT 获取客户端浏览器以及版本号

各大经典浏览器HTTP_USER_AGENT详细

IE 各个版本典型的userAgent如下: 

  •   Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0) 
  •   Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.2) 
  •   Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) 
  •   Mozilla/4.0 (compatible; MSIE 5.0; Windows NT)

  其中,版本号是MSIE之后的数字。 

  Firefox  几个版本的userAgent大致如下: 

  •   Mozilla/5.0 (Windows; U; Windows NT 5.2) Gecko/2008070208 Firefox/3.0.1 
  •   Mozilla/5.0 (Windows; U; Windows NT 5.1) Gecko/20070309 Firefox/2.0.0.3 
  •   Mozilla/5.0 (Windows; U; Windows NT 5.1) Gecko/20070803 Firefox/1.5.0.12

 其中,版本号是Firefox之后的数字。 

  Opera 典型的userAgent如下: 

  •   Opera/9.27 (Windows NT 5.2; U; zh-cn) 
  •   Opera/8.0 (Macintosh; PPC Mac OS X; U; en) 
  •   Mozilla/5.0 (Macintosh; PPC Mac OS X; U; en) Opera 8.0  

  其中,版本号是靠近Opera的数字。 

  Safari 典型的userAgent如下: 

  •   Mozilla/5.0 (Windows; U; Windows NT 5.2) AppleWebKit/525.13 (KHTML, like Gecko) Version/3.1 Safari/525.13 
  •   Mozilla/5.0 (iPhone; U; CPU like Mac OS X) AppleWebKit/420.1 (KHTML, like Gecko) Version/3.0 Mobile/4A93 Safari/419.3 

  其版本号是Version之后的数字。 

Chrome 的userAgent是: 

  • Mozilla/5.0 (Windows; U; Windows NT 5.2) AppleWebKit/525.13 (KHTML, like Gecko) Chrome/0.2.149.27 Safari/525.13  

  其中,版本号在Chrome之后的数字。 

Navigator 的userAgent是: 

  • Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.12) Gecko/20080219 Firefox/2.0.0.12 Navigator/9.0.0.6

其中,版本号在Navigator之后的数字。

/**
 * 获取客户端浏览器以及版本号
 * @param $agent    //$_SERVER['HTTP_USER_AGENT']
 * @return array[browser]       浏览器名称
 * @return array[browser_ver]   浏览器版本号
 */    
function getClientBrowser($agent = '') {
    $browser = '';
    $browser_ver = '';
    if (preg_match('/OmniWeb\/(v*)([^\s|;]+)/i', $agent, $regs)) {
        $browser = 'OmniWeb';
        $browser_ver = $regs[2];
    }
    if (preg_match('/Netscape([\d]*)\/([^\s]+)/i', $agent, $regs)) {
        $browser = 'Netscape';
        $browser_ver = $regs[2];
    }
    if (preg_match('/safari\/([^\s]+)/i', $agent, $regs)) {
        $browser = 'Safari';
        $browser_ver = $regs[1];
    }
    if (preg_match('/MSIE\s([^\s|;]+)/i', $agent, $regs)) {
        $browser = 'Internet Explorer';
        $browser_ver = $regs[1];
    }
    if (preg_match('/Opera[\s|\/]([^\s]+)/i', $agent, $regs)) {
        $browser = 'Opera';
        $browser_ver = $regs[1];
    }
    if (preg_match('/NetCaptor\s([^\s|;]+)/i', $agent, $regs)) {
        $browser = '(Internet Explorer '.$browser_ver.') NetCaptor';
        $browser_ver = $regs[1];
    }
    if (preg_match('/Maxthon/i', $agent, $regs)) {
        $browser = '(Internet Explorer '.$browser_ver.') Maxthon';
        $browser_ver = '';
    }
    if (preg_match('/360SE/i', $agent, $regs)) {
        $browser = '(Internet Explorer '.$browser_ver.') 360SE';
        $browser_ver = '';
    }
    if (preg_match('/SE 2.x/i', $agent, $regs)) {
        $browser = '(Internet Explorer '.$browser_ver.') 搜狗';
        $browser_ver = '';
    }
    if (preg_match('/FireFox\/([^\s]+)/i', $agent, $regs)) {
        $browser = 'FireFox';
        $browser_ver = $regs[1];
    }
    if (preg_match('/Lynx\/([^\s]+)/i', $agent, $regs)) {
        $browser = 'Lynx';
        $browser_ver = $regs[1];
    }
    if (preg_match('/Chrome\/([^\s]+)/i', $agent, $regs)) {
        $browser = 'Chrome';
        $browser_ver = $regs[1];
    }
    if (preg_match('/MicroMessenger\/([^\s]+)/i', $agent, $regs)) {
        $browser = '微信浏览器';
        $browser_ver = $regs[1];
    }
    if ($browser != '') {
        return ['browser'=>$browser, 'browser_ver'=>$browser_ver];
    } else {
        return ['browser'=>'未知','browser_ver'=> ''];
    }
}

这个参考:http://blog.sina.com.cn/s/blog_68b0cad1010169vr.html

(四)PHP解析HTTP_USER_AGENT 获取客户端手机型号

/**
 * 获取客户端手机型号
 * @param $agent    //$_SERVER['HTTP_USER_AGENT']
 * @return array[mobile_brand]      手机品牌
 * @return array[mobile_ver]        手机型号
 */
function getClientMobileBrand($agent = ''){
    if(preg_match('/iPhone\s([^\s|;]+)/i', $agent, $regs)) {
        $mobile_brand = '苹果';
        $mobile_ver = $regs[0];
    }elseif(preg_match('/SAMSUNG|Galaxy|GT-|SCH-|SM-\s([^\s|;]+)/i', $agent, $regs)) {
         $mobile_brand = '三星';
        $mobile_ver = $regs[0];
    }elseif(preg_match('/Huawei|Honor|H60-|H30-\s([^\s|;]+)/i', $agent, $regs)) {
         $mobile_brand = '华为';
        $mobile_ver = $regs[0];
    }elseif(preg_match('/Mi note|mi one\s([^\s|;]+)/i', $agent, $regs)) {        
        $mobile_brand = '小米';
        $mobile_ver = $regs[0];
    }elseif(preg_match('/HM NOTE|HM201\s([^\s|;]+)/i', $agent, $regs)) {        
        $mobile_brand = '红米';
        $mobile_ver = $regs[0];
    }elseif(preg_match('/Coolpad|8190Q|5910\s([^\s|;]+)/i', $agent, $regs)) {        
        $mobile_brand = '酷派';
        $mobile_ver = $regs[0];
    }elseif(preg_match('/ZTE|X9180|N9180|U9180\s([^\s|;]+)/i', $agent, $regs)) {        
        $mobile_brand = '中兴';
        $mobile_ver = $regs[0];
    }elseif(preg_match('/OPPO|X9007|X907|X909|R831S|R827T|R821T|R811|R2017\s([^\s|;]+)/i', $agent, $regs)) {        
        $mobile_brand = 'OPPO';
        $mobile_ver = $regs[0];
    }elseif(preg_match('/HTC|Desire\s([^\s|;]+)/i', $agent, $regs)) {        
        $mobile_brand = 'HTC';
        $mobile_ver = $regs[0];
    }elseif(preg_match('/Nubia|NX50|NX40\s([^\s|;]+)/i', $agent, $regs)) {        
        $mobile_brand = '努比亚';
        $mobile_ver = $regs[0];
    }elseif(preg_match('/M045|M032|M355\s([^\s|;]+)/i', $agent, $regs)) {        
        $mobile_brand = '魅族';
        $mobile_ver = $regs[0];
    }elseif(preg_match('/Gionee|GN\s([^\s|;]+)/i', $agent, $regs)) {        
        $mobile_brand = '金立';
        $mobile_ver = $regs[0];
    }elseif(preg_match('/HS-U|HS-E\s([^\s|;]+)/i', $agent, $regs)) {        
        $mobile_brand = '海信';
        $mobile_ver = $regs[0];
    }elseif(preg_match('/Lenove\s([^\s|;]+)/i', $agent, $regs)) {
        $mobile_brand = '联想';
        $mobile_ver = $regs[0];
    }elseif(preg_match('/ONEPLUS\s([^\s|;]+)/i', $agent, $regs)) {
        $mobile_brand = '一加';
        $mobile_ver = $regs[0];
    }elseif(preg_match('/vivo\s([^\s|;]+)/i', $agent, $regs)) {
        $mobile_brand = 'vivo';
        $mobile_ver = $regs[0];
    }elseif(preg_match('/K-Touch\s([^\s|;]+)/i', $agent, $regs)) {
        $mobile_brand = '天语';
        $mobile_ver = $regs[0];
    }elseif(preg_match('/DOOV\s([^\s|;]+)/i', $agent, $regs)) {
        $mobile_brand = '朵唯';
        $mobile_ver = $regs[0];
    }elseif(preg_match('/GFIVE\s([^\s|;]+)/i', $agent, $regs)) {
        $mobile_brand = '基伍';
        $mobile_ver = $regs[0];
    }elseif(preg_match('/Nokia\s([^\s|;]+)/i', $agent, $regs)) {
        $mobile_brand = '诺基亚';
        $mobile_ver = $regs[0];
    }else{
        $mobile_brand = '其他';
    }
    return ['mobile_brand'=>$mobile_brand, 'mobile_ver'=>$mobile_ver];
}

(五)PHP解析HTTP_USER_AGENT 记录IP和客户端访问信息

//记录IP和客户端访问信息
function insertClientInfo(){
    $ip = get_user_ip();
    $agent = $_SERVER['HTTP_USER_AGENT'];
 
    $ipinfo =  getClientIPInfo($ip); //获取IP相关信息
    $browser =  getClientBrowser($agent); //获取客户端浏览器以及版本号 
    $os = getClientOS($agent); //获取客户端操作系统 
    $mobilebrand =  getClientMobileBrand($agent); //获取客户端手机型号 
 
    $datetime = date('YmdHis');
    if($ipinfo){
        $ipinfo['add_time'] = $datetime;
        $client_ip_info_id = Db::name('client_ip_info')->insertGetId($ipinfo);
    }
    $client_agent_info = array_merge($browser, $os, $mobilebrand);
    $client_agent_info['add_time'] = $datetime;
    $client_agent_info_id = Db::name('client_agent_info')->insertGetId($client_agent_info);
    return ['client_ip_info_id' => $client_ip_info_id, 'client_agent_info_id' => $client_agent_info_id];
}
CREATE TABLE `client_agent_info` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `browser` char(30) DEFAULT NULL COMMENT '浏览器',
  `browser_ver` char(30) DEFAULT NULL COMMENT '版本',
  `os` char(30) DEFAULT NULL COMMENT '操作系统',
  `os_ver` char(30) DEFAULT NULL COMMENT '版本',
  `equipment` char(30) DEFAULT NULL COMMENT '设备',
  `mobile_brand` char(30) DEFAULT NULL COMMENT '手机品牌',
  `mobile_ver` char(30) DEFAULT NULL COMMENT '型号',
  `add_time` datetime DEFAULT NULL COMMENT '添加时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 COMMENT='记录客户端操作系统浏览器手机登信息';
 
CREATE TABLE `client_ip_info` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `ip` char(30) DEFAULT NULL,
  `country` char(30) DEFAULT NULL,
  `area` char(30) DEFAULT NULL,
  `region` char(30) DEFAULT NULL,
  `city` char(30) DEFAULT NULL,
  `county` char(30) DEFAULT NULL,
  `isp` char(30) DEFAULT NULL,
  `country_id` char(30) DEFAULT NULL,
  `area_id` char(20) DEFAULT NULL,
  `region_id` char(20) DEFAULT NULL,
  `city_id` char(20) DEFAULT NULL,
  `county_id` char(20) DEFAULT NULL,
  `isp_id` char(20) DEFAULT NULL,
  `add_time` datetime DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8 COMMENT='记录ip相关地址信息';

内容转自

(一)通过IP获取客户端相关访问信息 https://blog.csdn.net/weixin_37689230/article/details/82862498

(二)获取客户端操作系统 https://blog.csdn.net/weixin_37689230/article/details/82862560

(三)获取客户端浏览器以及版本号https://blog.csdn.net/weixin_37689230/article/details/82862543

(四)获取客户端手机型号 https://blog.csdn.net/weixin_37689230/article/details/82863036

(五)记录IP和客户端访问信息 https://blog.csdn.net/weixin_37689230/article/details/82862936

原创文章,作者:Zeyu,如若转载,请注明出处:https://jinzhijun.cn/develop/103

发表评论

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