0%

PHP获取ip地址

PHP获取ip地址的方式

废话不多说,上代码。

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

/**
* 获取ip地址
* @return String ip地址
*/
function get_ip() {
$ip = '未知IP';
if (!empty(filter_input(INPUT_SERVER, 'HTTP_CLIENT_IP'))) {
return is_ip(filter_input(INPUT_SERVER, 'HTTP_CLIENT_IP')) ? filter_input(INPUT_SERVER, 'HTTP_CLIENT_IP') : $ip;
} elseif (!empty(filter_input(INPUT_SERVER, 'HTTP_X_FORWARDED_FOR'))) {
return is_ip(filter_input(INPUT_SERVER, 'HTTP_X_FORWARDED_FOR')) ? filter_input(INPUT_SERVER, 'HTTP_X_FORWARDED_FOR') : $ip;
} else {
return is_ip(filter_input(INPUT_SERVER, 'REMOTE_ADDR')) ? filter_input(INPUT_SERVER, 'REMOTE_ADDR') : $ip;
}
}

/**
* 判断ip地址正确性
* @param String $str ip地址
* @return boolean 判断是否为ip地址
*/
function is_ip($str) {
$ip = explode('.', $str);
for ($i = 0; $i < count($ip); $i++) {
if ($ip[$i] > 255) {
return false;
}
}
return preg_match('/^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$/', $str);
}

/**
* 利用原生方法与正则表达式check ip与IP段(例如:1.*,1.1.*,1.1.1.*)
* @return boolean
*/
public function checkIp($ip): bool {
$pattern = '/(^(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|[1-9])\.(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|\d)\.(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|\d)\.\*$)|(^(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|[1-9])\.\*$)|(^(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|[1-9])\.(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|\d)\.\*$)|(\*)/';
if (preg_match($pattern, $ip) || filter_var($ip, FILTER_VALIDATE_IP)) {
return true;
}
return false;
}

bulb