我有以下PHP代码来获取vistor ip
function VisitorIP()
{
if(isset($_SERVER['HTTP_X_FORWARDED_FOR']))
$TheIp=$_SERVER['HTTP_X_FORWARDED_FOR'];
else $TheIp=$_SERVER['REMOTE_ADDR'];
return trim($TheIp);
}
$Users_IP_address = VisitorIP();
但是每次我在我的localhost上执行这个脚本时,我得到了:: 1作为IP
我怎样才能获得准确的互联网IP&系统IP地址 因为我的脚本将在LAN nwteork上运行,我想记录lan pcs&互联网IP并将其保存在mysql数据库中。
我需要PHP代码,它提供本地系统IP和系统互联网IP。
由于
答案 0 :(得分:3)
从技术上讲,您获得了正确的IP。 ::1
是您的环回(localhost)IPv6地址。
答案 1 :(得分:2)
首先,抛弃这个愚蠢的函数,因为HTTP_X_FORWARDED_FOR不是一个IP地址而只是一个HTTP头,并且只是
$Users_IP_address = $_SERVER['REMOTE_ADDR'];
接下来,您必须将服务器设置为使用ipv4,而不是ipv6 虽然它不是真正的PHP问题,应该在serverfault上询问,提供完整的系统设置:操作系统,版本,您的权利等。
答案 2 :(得分:1)
当您在localhost上运行上述脚本时,您可以获得::1
此结果。
这很常见。
如果您想使用localhost获取系统IP地址,请使用此代码。
1)localhost
<?PHP
$ip = @file_get_contents("http://www.apps-tube.com/apps/ip-address/ip.php");
echo $ip;
?>
2)Servers
<?PHP
function getUserIP()
{
$client = @$_SERVER['HTTP_CLIENT_IP'];
$forward = @$_SERVER['HTTP_X_FORWARDED_FOR'];
$remote = $_SERVER['REMOTE_ADDR'];
if(filter_var($client, FILTER_VALIDATE_IP))
{
$ip = $client;
}
elseif(filter_var($forward, FILTER_VALIDATE_IP))
{
$ip = $forward;
}
else
{
$ip = $remote;
}
return $ip;
}
$user_ip = getUserIP();
echo $user_ip; // Output IP address [Ex: 177.87.193.134]
?>