我想获取使用我网站的客户端 IP 地址。我正在使用 PHP$_SERVER超全局:
$_SERVER
$_SERVER['REMOTE_ADDR'];
但我看到它不能使用这个给出正确的 IP 地址。我得到了我的 IP 地址,发现它与我的 IP 地址不同,我还可以在某些网站上看到我的 IP 地址,例如:
http://whatismyipaddress.com/
我粘贴了提供我的 PHP 功能的 IP 地址,但这个网站没有显示任何结果。这个问题是怎么来的,我怎样才能得到客户端的IP地址?
获取访问者/客户的IP 地址的最简单方法是使用$_SERVER['REMOTE_ADDR']or$_SERVER['REMOTE_HOST']变量。
$_SERVER['REMOTE_ADDR']
$_SERVER['REMOTE_HOST']
但是,有时这不会返回访问者的正确 IP 地址,因此我们可以使用其他一些服务器变量来获取 IP 地址。
下面的两个函数是等效的,不同之处仅在于检索值的方式和位置。
getenv() 用于获取 PHP 中环境变量的值。
// Function to get the client IP address function get_client_ip() { $ipaddress = ''; if (getenv('HTTP_CLIENT_IP')) $ipaddress = getenv('HTTP_CLIENT_IP'); else if(getenv('HTTP_X_FORWARDED_FOR')) $ipaddress = getenv('HTTP_X_FORWARDED_FOR'); else if(getenv('HTTP_X_FORWARDED')) $ipaddress = getenv('HTTP_X_FORWARDED'); else if(getenv('HTTP_FORWARDED_FOR')) $ipaddress = getenv('HTTP_FORWARDED_FOR'); else if(getenv('HTTP_FORWARDED')) $ipaddress = getenv('HTTP_FORWARDED'); else if(getenv('REMOTE_ADDR')) $ipaddress = getenv('REMOTE_ADDR'); else $ipaddress = 'UNKNOWN'; return $ipaddress; }
$_SERVER 是一个数组,其中包含由 Web 服务器创建的服务器变量。
// Function to get the client IP address function get_client_ip() { $ipaddress = ''; if (isset($_SERVER['HTTP_CLIENT_IP'])) $ipaddress = $_SERVER['HTTP_CLIENT_IP']; else if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])) $ipaddress = $_SERVER['HTTP_X_FORWARDED_FOR']; else if(isset($_SERVER['HTTP_X_FORWARDED'])) $ipaddress = $_SERVER['HTTP_X_FORWARDED']; else if(isset($_SERVER['HTTP_FORWARDED_FOR'])) $ipaddress = $_SERVER['HTTP_FORWARDED_FOR']; else if(isset($_SERVER['HTTP_FORWARDED'])) $ipaddress = $_SERVER['HTTP_FORWARDED']; else if(isset($_SERVER['REMOTE_ADDR'])) $ipaddress = $_SERVER['REMOTE_ADDR']; else $ipaddress = 'UNKNOWN'; return $ipaddress; }