(一)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