PHP to get the local network and public network IP code

  • 2020-03-31 20:39:43
  • OfStack

You generally use $_SERVER['REMOTE_ADDR'] to get the user's IP,

But if you use a reverse proxy, REMOTE_ADDR in the HTTP header is not the user's address, but the address of the next level of the proxy.

After my research, there are two ways to obtain the real extranet IP of users.


Method 1: curl
 
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 address
 
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; 
} 

Related articles: