[英]How to use php to get ip address of a visitor
我想获得我的用户的位置,但我不想使用第三方系统来做到这一点
所以我做了这个脚本
<?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.43.104 但如果我用谷歌搜索“我的 ip”,我会得到197.210.85.238 Your public IP address
是从我的公共197.210.85.238 Your public IP address
中获得的,我的位置可以从
您的服务器只能在您通过 WAN(又名公共互联网)访问时了解您的公共 IP。
如果您使用以下 IP 访问服务器:
请注意,它们是 IANA 为私有网络保留的 IPv4 地址,应该只在路由器后面使用。 并且任何路由器都可以自由使用它们(因此它对定位用户地理位置没有意义)。
由于您仅通过局域网 (LAN) 访问该服务器,因此您的流量根本没有通过公共互联网路由。 本地网络流量将不包含您要求的公共 IP 信息。
简而言之,请将您的应用程序放在公共服务器上以正确测试您的代码。
PS 正如其他人指出的那样,geoip 数据从来都不是 100% 准确的。 如果您决定仅根据 IP 确定用户位置,则您需要接受结果不准确。
我来回答你的两个问题。
是的,它是一个私有 IP 地址范围。 IP 地理定位服务(例如 IP2Location)仅适用于公共 IP 地址范围。
问题不在于您的脚本。 一个简单的 $_SERVER['REMOTE_ADDR']; 在大多数情况下,应该获取您的访问者 IP 地址。 但是,您需要在 WAN 而不是 LAN 中对其进行测试。 例如,您将页面放在位于数据中心的服务器中,并从办公室的另一个网络访问它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.