php 获取本机外网公网IP的代码
2018-09-07 15:26
大家一般都是用$_SERVER[REMOTE_ADDR]来获取用户IP,
但是如果使用了反向代理的,HTTP头中REMOTE_ADDR就不是用户的地址,反而是上一级代理的地址了。
经过我的研究有两种方法来获取用户的真实外网IP。
方法一:curl
复制代码 代码如下:
function get_onlineip() {
$ch = curl_init(
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$a = curl_exec($ch);
preg_match(/\[(.*)\]/, $a, $ip);
return $ip[1];
}
方法二:$_SERVER[HTTP_X_FORWARDED_FOR]来获取相应的地址
复制代码 代码如下:
function get_onlineip() {
$onlineip = ;
if(getenv(HTTP_CLIENT_IP) && strcasecmp(getenv(HTTP_CLIENT_IP), unknown)) {
$onlineip = getenv(HTTP_CLIENT_IP);
} elseif(getenv(HTTP_X_FORWARDED_FOR) && strcasecmp(getenv(HTTP_X_FORWARDED_FOR), unknown)) {
$onlineip = getenv(HTTP_X_FORWARDED_FOR);
} elseif(getenv(REMOTE_ADDR) && strcasecmp(getenv(REMOTE_ADDR), unknown)) {
$onlineip = getenv(REMOTE_ADDR);
} elseif(isset($_SERVER[REMOTE_ADDR]) && $_SERVER[REMOTE_ADDR] && strcasecmp($_SERVER[REMOTE_ADDR], unknown)) {
$onlineip = $_SERVER[REMOTE_ADDR];
}
return $onlineip;
}