如何使用php获取访问者的IP地址
Posted
技术标签:
【中文标题】如何使用php获取访问者的IP地址【英文标题】:How to use php to get ip address of a visitor 【发布时间】:2020-12-12 06:53:20 【问题描述】:我想获取我的用户的位置,但我不想使用第三方系统来做到这一点 所以我做了这个脚本
<?php
function getIPAddress()
//whether ip is from the share internet
if(!empty($_SERVER['HTTP_CLIENT_IP']))
$ip = $_SERVER['HTTP_CLIENT_IP'];
//whether ip is from the proxy
elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR']))
$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
//whether ip is from the remote address
else
$ip = $_SERVER['REMOTE_ADDR'];
return $ip;
$ip = getIPAddress();
echo $ip;
?>
当我访问 http://localhost 时它会回显 ::1 然后当我连接到互联网并转到 http://192.168.43.104 它时会回显 192.168.43.104 我在网上看到 192.168.xxx.xxx 是公共 IP并且有数百万用户在使用 192.168.xxx.xxx ,并且无法从中获取我的访问者位置 我的问题是
-
真的不能用192.168.xxx.xxx来判断用户位置吗
如果上述脚本无法获取用户位置,我该怎么做
为了清楚起见,我只想要他们的 IP 地址,因为我需要第三方服务来将他们的 IP 地址更改为某个位置,所以我认为最好保留一个数字
编辑
目前在我的页面上它告诉我 192.168.43.104 但如果我用谷歌搜索“我的 ip”,我会得到 197.210.85.238 Your public IP address
是不是从我的公共 IP 地址可以获取我的位置
【问题讨论】:
你首先要明白 ip 不是一个能告诉你用户确切位置的魔法钥匙。 如果你真的想获取用户的位置,你应该使用 GeoIP。 【参考方案1】:您的服务器只有在您通过 WAN(也称为公共互联网)访问它时才能获知您的公共 IP。
如果您使用以下 IP 访问您的服务器:
10.0.0.0 - 10.255.255.255 172.16.0.0 - 172.31.255.255 192.168.0.0 - 192.168.255.255请注意,它们是 IANA 为 private networks 保留的 IPv4 地址,它们应该只在路由器后面使用。并且任何路由器都可以免费使用它们(因此它在定位用户地理位置方面没有任何意义)。
由于您仅通过局域网 (LAN) 访问该服务器,因此您的流量根本没有通过公共互联网路由。本地网络流量不包含您要求的公共 IP 信息。
简而言之,请将您的应用程序放在公共服务器上以正确测试您的代码。
附:正如其他人指出的那样,geoip 数据永远不会 100% 准确。如果您决定仅根据 IP 确定用户位置,则需要接受您的结果不准确。
【讨论】:
【参考方案2】:让我回答你的两个问题。
-
真的不能用192.168.xxx.xxx来判断用户位置吗
是的,它是一个私有 IP 地址范围。 IP 地理定位服务(例如 IP2Location)仅适用于公共 IP 地址范围。
-
如果上述脚本无法获取用户位置,我该怎么做。为了清楚起见,我只想要他们的 IP 地址,因为我需要第三方服务来将他们的 IP 地址更改为一个位置,所以我认为最好留下一个数字
问题不在于您的脚本。一个简单的 $_SERVER['REMOTE_ADDR'];在大多数情况下,应该会获取您的访问者 IP 地址。但是,您需要在 WAN 而不是 LAN 中对其进行测试。例如,您将页面放在位于数据中心的服务器中,然后从办公室的另一个网络访问它。
【讨论】:
以上是关于如何使用php获取访问者的IP地址的主要内容,如果未能解决你的问题,请参考以下文章