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"]