用下面代码就可以得到
function get_ip()
{
if(getenv("HTTP_CLIENT_IP")
&&
strcasecmp(getenv("HTTP_CLIENT_IP"), "unknown"))
$ip =
getenv("HTTP_CLIENT_IP");
else if (getenv("HTTP_X_FORWARDED_FOR")
&&
strcasecmp(getenv("HTTP_X_FORWARDED_FOR"), "unknown"))
$ip =
getenv("HTTP_X_FORWARDED_FOR");
else if (getenv("REMOTE_ADDR")
&&
strcasecmp(getenv("REMOTE_ADDR"), "unknown"))
$ip =
getenv("REMOTE_ADDR");
else if (isset($_SERVER['REMOTE_ADDR'])
&& $_SERVER['REMOTE_ADDR']
&&
strcasecmp($_SERVER['REMOTE_ADDR'], "unknown"))
$ip =
$_SERVER['REMOTE_ADDR'];
else
$ip =
"unknown";
return $ip;
}
看discuz源码发现它是这样获取的。
function _get_client_ip()
{
$ip = $_SERVER['REMOTE_ADDR'];
if (isset($_SERVER['HTTP_CLIENT_IP'])
&&
preg_match('/^([0-9]{1,3}\.){3}[0-9]{1,3}$/',
$_SERVER['HTTP_CLIENT_IP'])) {
$ip =
$_SERVER['HTTP_CLIENT_IP'];
} elseif(isset($_SERVER['HTTP_X_FORWARDED_FOR'])
AND preg_match_all('#\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}#s',
$_SERVER['HTTP_X_FORWARDED_FOR'], $matches)) {
foreach
($matches[0] AS $xip) {
if
(!preg_match('#^(10|172\.16|192\.168)\.#', $xip)) {
$ip = $xip;
break;
}
}
}
return $ip;
}