[英]getting wrong IP address in php
我有以下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();
但是每次我在本地主机上执行此脚本时,都会得到:: 1作为IP
我如何获得确切的Internet IP和系统IP地址,因为我的脚本将在LAN nwteork上运行,并且我想记录lan pc和Internet IP的IP并将其保存在mysql数据库中。
我需要专用于本地系统IP和系统Internet IP的PHP代码。
谢谢
从技术上讲,您将获得正确的IP。 ::1
是您的回送(localhost)IPv6地址。
首先,丢掉这个愚蠢的函数,因为HTTP_X_FORWARDED_FOR不是IP地址,而仅仅是HTTP标头,并且使其变得仅仅是
$Users_IP_address = $_SERVER['REMOTE_ADDR'];
接下来,您必须设置服务器以使用ipv4,而不是ipv6。
尽管这并不是真正的PHP问题,应该在serverfault上进行询问,并提供完整的系统设置:操作系统,版本,您的权利等。
当您在本地主机上运行以上脚本时,可以获得::1
结果。
这很常见。
如果要使用本地主机获取系统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]
?>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.