PHP获取客户端和服务器端IP
作者:
秒速五厘米
//客户端的ip变量: //客户端IP,也有可能是代理IP echo $_SERVER['REMOTE_ADDR']; //代理端的IP,可能存在,也可能伪造 echo $_SERVER['HTTP_CLIENT_IP']; //用户在哪个ip上使用的id,可能存在,也可能伪造 echo $_SERVER['HTTP_X_FORWARDED_FOR']; //服务端的ip变量: //需要使用函数gethostname()来获得,这个无论是服务器端还是客户端都能正常显示。 echo $_SERVER["SERVER_NAME"]; //服务器端的ip地址,在服务器端测试ip地址,在客户端测试正常。 echo $_SERVER["SERVER_ADDR"]; //在服务器端测试:127.0.0.1(这个与httpd.conf中BindAddress的设置值相关)。在客户端测试结果正确。
例子:
/**
* 获取客户端IP地址
* @return string
*/
function get_client_ip() {
if(getenv('HTTP_CLIENT_IP')){
$client_ip = getenv('HTTP_CLIENT_IP');
} elseif(getenv('HTTP_X_FORWARDED_FOR')) {
$client_ip = getenv('HTTP_X_FORWARDED_FOR');
} elseif(getenv('REMOTE_ADDR')) {
$client_ip = getenv('REMOTE_ADDR');
} else {
$client_ip = $_SERVER['REMOTE_ADDR'];
}
return $client_ip;
}
/**
* 获取服务器端IP地址
* @return string
*/
function get_server_ip() {
if (isset($_SERVER)) {
if($_SERVER['SERVER_ADDR']) {
$server_ip = $_SERVER['SERVER_ADDR'];
} else {
$server_ip = $_SERVER['LOCAL_ADDR'];
}
} else {
$server_ip = getenv('SERVER_ADDR');
}
return $server_ip;
}总结:
客户端IP:$_SERVER['REMOTE_ADDR']
服务器端IP:$_SERVER["SERVER_ADDR"]