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

(0)
ZeyuZeyu
上一篇 2020年11月3日 上午8:26
下一篇 2020年11月11日 下午6:01

相关推荐

  • Centos安装elasticsearch教程

    最近在部署一个项目是用 laravel开发,项目用到了了 elasticsearch,通过自己的搜索和学习能力不算很费力解决了。下面就整理一下安装elasticsearch教程,服…

    2020年11月26日
    1.6K
  • 记录一下宝塔搭建Redis遇到的一个小问题

    最近在对接广东省互联网医院监管平台时,发现广东这边是要求平台必须要有医生和患者要有视频通话功能。因为原本的消息通话是用的网易IM,所以音视频也选的网易。网易音视频能实现通话视频云录…

    2021年6月29日
    1.5K
  • vmware最小安装centos并配置固定本地固定ip

    最近公司互联网医院的接入工作差不多进入了尾声,接下来就是整理一些资料什么的,所以有些空闲时间,想着学一下swoole,然后就碰到了安装虚拟机的问题。之前也装过很多次,但是每次安装都…

    2021年8月16日
    1.8K
  • php向Postgresql中插入时间格式问题

    最近在对接互联网医院监管前置机时,向前置机Postgresql数据库插入数据时出现了一个问题,就是我在数据插入前置机前把时间用date(‘Y-m-d h:i:s&#82…

    2021年7月23日
    1.4K
  • 广东省互联网医院接入——远程确认

    今天公司互联网医院接入终于走到了远程确认这一步了,因为一直是摸着石头过河,中间做了不少弯路,这里做个记录,希望也在摸索的同行如果看到能有一个参考。当然写这个的时候,还只是远程演示了…

    技术开发 2021年8月18日
    1.3K
  • 香港阿里云Windows服务器省钱方法

    最近把因为香港阿里云服务器要续费了,因为之前购买的时候服务器上还部署了其他的java系统,当时对Linux操作不熟,所以操作系统选的是Windows的系统,但是阿里云香港的服务器需…

    2020年11月11日
    1.6K
  • 广东互联网医院监管对接_前置机FTP文件上传

    最近在广东省互联网医院监管对接过程中,有些文件需要同步到前置机上,我这里用到的解决方案是通过ftp上传文件功能实现的,这里记录一下一些遇到的问题。 1.安装,配置ftp服务器软件 …

    2021年5月26日
    1.6K
  • 红米8A刷机root流程记录

    自从安卓版本升级以后,app抓包https就成了问题,所以上周就在咸鱼上买了一个红米8a,计划着root手机来做开发测试使用。在绑了小米账号7天后,终于可以解除bl锁,然后把手机r…

    2023年3月5日
    6.0K
  • 互联网医院_三级等保_存储型跨脚本执行漏洞

    最近公司在做三级等保备案,安全测试方反馈过来一份漏洞测试报告,其中有一条定义为高危的漏洞:存储型跨脚本执行。 造成这个漏洞的原因,是因为没有对客户端提交的内容进行安全过滤。系统用的…

    2021年2月5日
    40.6K
  • Centos7 升级内核版本(转)

    1、查看当前内核版本 [root@localhost ~]# uname -r 3.10.0-327.el7.x86_64 [root@localhost ~]# uname -a…

    2022年3月13日
    1.4K

发表回复

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