PHP获取ip地址的方式
代码语言:javascript复制废话不多说,上代码。
/**
* 获取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 = '/(^(1d{2}|2[0-4]d|25[0-5]|[1-9]d|[1-9]).(1d{2}|2[0-4]d|25[0-5]|[1-9]d|d).(1d{2}|2[0-4]d|25[0-5]|[1-9]d|d).*$)|(^(1d{2}|2[0-4]d|25[0-5]|[1-9]d|[1-9]).*$)|(^(1d{2}|2[0-4]d|25[0-5]|[1-9]d|[1-9]).(1d{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;
}