PHP获取ip地址

PHP获取ip地址

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 = '/(^(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;

}

相关推荐