获取客户端操作系统类型,浏览器信息,服务器基本信息

前言:

PHP获取客户端浏览器以及操作系统信息是通过客户端浏览器传递过来的useragent信息进行判定的,因为客户端useragent信息可以伪造,所以通过PHP获取到的浏览器以及操作系统信息只能作为参考,如下代码还有待丰富的地方。

PHP中可以直接通过读取超全局数组$_SERVER[‘HTTP_USER_AGENT’]进行正则匹配即可获取到相应的浏览和操作系统信息。说白了,就是对php的pcre兼容的正则表达式的理解。

代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
/**
* User: 謝雲虎
* DateTime: 2021/11/5 16:38
* Desc:获取客户端操作系统类型
* @return mixed
*/
function getOS(){
$os = '';
$agent = strtolower($_SERVER['HTTP_USER_AGENT']);
if(strpos($agent, 'iphone') || strpos($agent, 'ipad')) {
$os = 'ios';
}elseif(strpos($agent, 'android')) {
$os = 'android';
}elseif (preg_match('/win/i',$agent)&&preg_match('/nt 6.1/i',$agent)){
$os = 'Windows 7';
}elseif(preg_match('/win/i', $agent) && preg_match('/nt 6.2/i', $agent)) {
$os = 'Windows 8';
}elseif(preg_match('/win/i',$agent)&&preg_match('/nt 10.0/i',$agent)){
$os = 'Windows 10';
}elseif(preg_match('/win/i',$agent)&&preg_match('/nt 5.1/i',$agent)){
$os = 'Windows XP';
}elseif(preg_match('/win/i',$agent)&&preg_match('/nt/i',$agent)){
$os = 'Windows NT';
}elseif(preg_match('/win/i',$agent)&&strpos($agent, '95')){
$os = 'Windows 95';
}elseif(preg_match('/win 9x/i',$agent)&&strpos($agent, '4.90')){
$os = 'Windows ME';
}elseif(preg_match('/win/i',$agent)&&preg_match('/98/i',$agent)){
$os = 'Windows 98';
}elseif(preg_match('/win/i',$agent)&&preg_match('/nt 5.0/i',$agent)){
$os = 'Windows 2000';
}elseif(preg_match('/win/i',$agent)&&preg_match('/nt 6.0/i',$agent)){
$os = 'Windows Vista';
}elseif(preg_match('/win/i',$agent)&&preg_match('/32/i',$agent)){
$os = 'Windows 32';
}elseif(preg_match('/linux/i',$agent)){
$os = 'Linux';
}elseif(preg_match('/unix/i',$agent)){
$os = 'Unix';
}else if(preg_match('/sun/i',$agent)&&preg_match('/os/i',$agent)){
$os = 'SunOS';
}elseif(preg_match('/ibm/i',$agent)&&preg_match('/os/i',$agent)){
$os = 'IBM OS/2';
}elseif(preg_match('/Mac/i',$agent)&&preg_match('/PC/i',$agent)){
$os = 'Macintosh';
}elseif(preg_match('/PowerPC/i',$agent)){
$os = 'PowerPC';
}elseif(preg_match('/AIX/i',$agent)){
$os = 'AIX';
}elseif(preg_match('/HPUX/i',$agent)){
$os = 'HPUX';
}elseif(preg_match('/NetBSD/i',$agent)){
$os = 'NetBSD';
}elseif(preg_match('/BSD/i',$agent)){
$os = 'BSD';
}elseif(preg_match('/OSF1/i',$agent)){
$os = 'OSF1';
}elseif(preg_match('/IRIX/i',$agent)){
$os = 'IRIX';
}elseif(preg_match('/FreeBSD/i',$agent)){
$os = 'FreeBSD';
}elseif(preg_match('/PostmanRuntime/i',$agent)){
$os = 'PostmanRuntime';
}elseif($os==''){
$os = '未知系统';
}
$data['os'] = $os;
$data['agent'] = $agent;
return $data;
}

/**
* User: 謝雲虎
* DateTime: 2021/11/5 16:45
* Desc:获取服务器基本信息
* @return array
*/
function osInfo()
{
$info = array(
'操作系统' => PHP_OS,
'运行环境' => $_SERVER["SERVER_SOFTWARE"],
'主机名' => $_SERVER['SERVER_NAME'],
'WEB服务端口' => $_SERVER['SERVER_PORT'],
'网站文档目录' => $_SERVER["DOCUMENT_ROOT"],
'浏览器信息' => substr($_SERVER['HTTP_USER_AGENT'], 0, 40),
'通信协议' => $_SERVER['SERVER_PROTOCOL'],
'请求方法' => $_SERVER['REQUEST_METHOD'],
'PHP版本' => PHP_VERSION,
'上传附件限制' => ini_get('upload_max_filesize'),
'执行时间限制' => ini_get('max_execution_time').'秒',
'服务器时间' => date("Y年n月j日 H:i:s"),
'北京时间' => gmdate("Y年n月j日 H:i:s",time()+8*3600),
'服务器域名/IP' => $_SERVER['SERVER_NAME'].' [ '.gethostbyname($_SERVER['SERVER_NAME']).' ]',
'剩余空间' => round((disk_free_space(".")/(1024*1024)),2).'M',
'当前用户的IP地址'=> $_SERVER['REMOTE_ADDR'],
);
return $info;
}

/**
* User: 謝雲虎
* DateTime: 2021/11/5 16:45
* Desc:获取客户端浏览器信息
* @return string
*/
function getBroswer()
{
$sys = $_SERVER['HTTP_USER_AGENT']; //获取用户代理字符串
if (stripos($sys, "Firefox/") > 0) {
preg_match("/Firefox\/([^;)]+)+/i", $sys, $b);
$exp[0] = "Firefox";
$exp[1] = $b[1]; //获取火狐浏览器的版本号
} elseif (stripos($sys, "Maxthon") > 0) {
preg_match("/Maxthon\/([\d\.]+)/", $sys, $aoyou);
$exp[0] = "傲游";
$exp[1] = $aoyou[1];
} elseif (stripos($sys, "MSIE") > 0) {
preg_match("/MSIE\s+([^;)]+)+/i", $sys, $ie);
$exp[0] = "IE";
$exp[1] = $ie[1]; //获取IE的版本号
} elseif (stripos($sys, "OPR") > 0) {
preg_match("/OPR\/([\d\.]+)/", $sys, $opera);
$exp[0] = "Opera";
$exp[1] = $opera[1];
} elseif(stripos($sys, "Edge") > 0) {
//win10 Edge浏览器 添加了chrome内核标记 在判断Chrome之前匹配
preg_match("/Edge\/([\d\.]+)/", $sys, $Edge);
$exp[0] = "Edge";
$exp[1] = $Edge[1];
} elseif (stripos($sys, "Chrome") > 0) {
preg_match("/Chrome\/([\d\.]+)/", $sys, $google);
$exp[0] = "Chrome";
$exp[1] = $google[1]; //获取google chrome的版本号
} elseif(stripos($sys,'rv:')>0 && stripos($sys,'Gecko')>0){
preg_match("/rv:([\d\.]+)/", $sys, $IE);
$exp[0] = "IE";
$exp[1] = $IE[1];
}else {
$exp[0] = "未知浏览器";
$exp[1] = "0/0";
}
return $exp[0].'('.$exp[1].')';
}