php - 如何使用php获取访问者的IP地址
问题描述
我想获取我的用户的位置,但我不想使用第三方系统来做到这一点
所以我制作了这个脚本
<?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
从我的公共 ipaddress 中获得我的位置
解决方案
您的服务器只能在您通过 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 为专用网络保留的 IPv4 地址,它们应该只在路由器后面使用。并且任何路由器都可以免费使用它们(因此它在定位用户地理位置方面没有任何意义)。
由于您仅通过局域网 (LAN) 访问该服务器,因此您的流量根本没有通过公共互联网路由。本地网络流量不包含您要求的公共 IP 信息。
简而言之,请将您的应用程序放在公共服务器上以正确测试您的代码。
PS 正如其他人所指出的,geoip 数据永远不会 100% 准确。如果您决定仅根据 IP 确定用户位置,您需要接受您的结果不准确。
推荐阅读
- ios - 我们可以创建广播上传扩展的 Pod 或 swift 包吗?
- c# - 存储库主签名有效期已过。(NU3037)
- angularjs - 如何使用单元格模板访问 ng-model 数据?
- plot - 如何使用 matplotlib 绘制时间 (hh:mm)
- sql - 如何处理这些错误,PL/SQL 编译单元分析已终止 & PSL-00201:必须声明“表名”
- jquery - JQuery Remote(表单电子邮件验证)调用仅在您提交一次表单后才有效
- jsdoc - 将内容动态注入到 JSDoc @example
- flutter - Flutter HomeScreen(this.user) - 错误:位置参数太少:需要1个
- python - 带有 send_key 功能的 Tkinter 文件浏览器
- javascript - JSON解码不接收数据