这个问题在这里已有答案:
我想获得使用我的网站的客户端IP地址 . 我正在使用PHP $_SERVER 超全局:
$_SERVER
$_SERVER['REMOTE_ADDR'];
但我发现使用它无法提供正确的IP地址 . 我得到了我的IP地址,看到它与我的IP地址不同,我也可以在某些网站上看到我的IP地址,如:
http://whatismyipaddress.com/
我粘贴了我的PHP函数的IP地址,但是这个网站没有显示结果 . 这个问题是如何产生的,如何获得客户端的IP地址?
获取访问者/客户端IP address的最简单方法是使用 $_SERVER['REMOTE_ADDR'] 或 $_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; }
在PHP 5.3或更高版本中,您可以这样得到它:
$ip = getenv('HTTP_CLIENT_IP')?: getenv('HTTP_X_FORWARDED_FOR')?: getenv('HTTP_X_FORWARDED')?: getenv('HTTP_FORWARDED_FOR')?: getenv('HTTP_FORWARDED')?: getenv('REMOTE_ADDR');
$ipaddress = ''; if ($_SERVER['HTTP_CLIENT_IP'] != '127.0.0.1') $ipaddress = $_SERVER['HTTP_CLIENT_IP']; else if ($_SERVER['HTTP_X_FORWARDED_FOR'] != '127.0.0.1') $ipaddress = $_SERVER['HTTP_X_FORWARDED_FOR']; else if ($_SERVER['HTTP_X_FORWARDED'] != '127.0.0.1') $ipaddress = $_SERVER['HTTP_X_FORWARDED']; else if ($_SERVER['HTTP_FORWARDED_FOR'] != '127.0.0.1') $ipaddress = $_SERVER['HTTP_FORWARDED_FOR']; else if ($_SERVER['HTTP_FORWARDED'] != '127.0.0.1') $ipaddress = $_SERVER['HTTP_FORWARDED']; else if ($_SERVER['REMOTE_ADDR'] != '127.0.0.1') $ipaddress = $_SERVER['REMOTE_ADDR']; else $ipaddress = 'UNKNOWN';
以下是使用本地和LAN IP地址过滤器获取IP地址的功能:
function get_IP_address() { foreach (array('HTTP_CLIENT_IP', 'HTTP_X_FORWARDED_FOR', 'HTTP_X_FORWARDED', 'HTTP_X_CLUSTER_CLIENT_IP', 'HTTP_FORWARDED_FOR', 'HTTP_FORWARDED', 'REMOTE_ADDR') as $key){ if (array_key_exists($key, $_SERVER) === true){ foreach (explode(',', $_SERVER[$key]) as $IPaddress){ $IPaddress = trim($IPaddress); // Just to be safe if (filter_var($IPaddress, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE) !== false) { return $IPaddress; } } } } }
q
它也适用于内部IP地址:
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; }
5 回答
获取访问者/客户端IP address的最简单方法是使用
$_SERVER['REMOTE_ADDR']
或$_SERVER['REMOTE_HOST']
变量 .但是,有时这不会返回访问者的正确IP地址,因此我们可以使用其他一些服务器变量来获取IP地址 .
以下两个函数仅相同,只取决于检索值的方式和位置 .
getenv()用于获取PHP中环境变量的值 .
$ _SERVER是一个包含Web服务器创建的服务器变量的数组 .
在PHP 5.3或更高版本中,您可以这样得到它:
以下是使用本地和LAN IP地址过滤器获取IP地址的功能:
q
它也适用于内部IP地址: