Everyone usually uses $_SERVER['REMOTE_ADDR'] to obtain the user's IP.
But if a reverse proxy is used, the REMOTE_ADDR in the HTTP header is not the user's address, but the address of the upper-level proxy. .
After my research, there are two methods to obtain the user’s real external IP.
Method 1: curl
Copy code The code is as follows:
function get_onlineip() {
$ch = curl_init('http://www.ip138.com/ip2city.asp');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$a = curl_exec($ch);
preg_match('/[(.*)]/', $a, $ip);
return $ip[1];
}
Method 2: $_SERVER['HTTP_X_FORWARDED_FOR'] to get the corresponding address
Copy the code The code is as follows:
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 ;
}
http://www.bkjia.com/PHPjc/321807.htmlwww.bkjia.comtruehttp: //www.bkjia.com/PHPjc/321807.htmlTechArticleWe generally use $_SERVER['REMOTE_ADDR'] to obtain the user IP, but if a reverse proxy is used Yes, REMOTE_ADDR in the HTTP header is not the user's address, but the address of the upper-level proxy...