欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

http - php有没有不使用第三方接口的情况下根据ip地址获取地理位置的方法?(第三方接口他们是通过什么原理实现这一功能的?)

程序员文章站 2022-04-04 20:42:13
...
我很好奇的是哪些根据ip获取地理位置的工具都是什么原理?ip中每位数字都代表了什么?我可以在本地不使用第三方接口的情况下完成这一任务吗?

回复内容:

我很好奇的是哪些根据ip获取地理位置的工具都是什么原理?ip中每位数字都代表了什么?我可以在本地不使用第三方接口的情况下完成这一任务吗?

什么是ISP呢?简单点理解就像是类似中国电信、联通、移动等网络供应商。
有了供应商了就可以上网了,上网你将能通过MODEM获取一个临时IP(周期性变化)。
但是这个IP是真的就随机给的吗?怎么随机的呢?
APNIC(亚太互联网络信息中心),就是这个组织了。是现在在世界中操作的五个地区的因特网登记处之一,分配B类IP地址的国际组织。它提供全球性的支持互联网操作的分派和注册服务。这些成员包括网络服务提供商、全国互联网登记, 和相似的组织的一个非营利, 基于会员资格的组织。APNIC 负责亚洲太平洋区域,包含 56 经济区。

假设,APNIC给中国分配了100万个IP地址。然后到国内,经由国内的*管理组织(不知道是谁)再分配给电信、移动、联通、移动等*ISP。然后这些ISP呢,再按照自己的规则给全国不同省份再分配,再到市、县、乡镇等。

IP地址每个数字并不代表什么,国内*ISP的IP分配是公开的,因此只有拿到这个库,才能根据用户的IP来知道用户是什么位置的由于这个库的更新并不及时,所以并不100%准确

update

国内比较流行的IP库就是纯真了。官网:http://www.cz88.net/ 右上角可以下载。安装后在目录下有个.dat的文件就是IP分配数据库了。结合PHP的使用和其他语言的使用百度一搜就有。

PHP安装GeoIP扩展和数据库根据IP获取访客所在国家/城市/经纬度等信息
http://php.net/manual/zh/ref....
sudo apt-get install libgeoip-dev
pecl install geoip-1.1.0
注意:Beta版要指定版本号.如果是apt安装的PHP,直接安装php5-geoip这个包即可.
php.ini中加入:

extension=geoip.so
geoip.custom_directory="/usr/share/GeoIP"

免费下载GeoLiteCity数据库(解压后18MB):
http://dev.maxmind.com/geoip/...
wget http://geolite.maxmind.com/do...
gunzip GeoLiteCity.dat.gz
sudo mkdir -v /usr/share/GeoIP
sudo mv -v GeoLiteCity.dat /usr/share/GeoIP/GeoIPCity.dat

测试:
php -a

 AS
    [country_code] => CN
    [country_code3] => CHN
    [country_name] => China //国家
    [region] => 22
    [city] => Beijing //城市
    [postal_code] =>
    [latitude] => 39.928901672363 //纬度
    [longitude] => 116.38829803467 //经度
    [dma_code] => 0
    [area_code] => 0
)

PHP轻松实现"附近的人"功能,根据IP确定经纬度,根据经纬度计算距离

不使用第三方接口,也需要使用第三方提供的IP库进行匹配查询。
但是都不嫩达到100%的准确。

推荐一个既提供接口也提供IP库的服务商:http://www.ipip.net/

他们都有自己IP库的。除非你本地也有IP库

第三方接口能通过ip获取地理位置信息, 其实是其本地保存了ip => address -info 的数据库映射, 因为他们的数据库里保存了大量的ip和地理位置的关系, 所以才能为我们提供第三方服务

当然, 你完全可以自己去实现, 但是你可能没有那么庞大的数据库支持

你若还是不想请求第三方接口, 可以下载一个

免费的GeoIP数据库

这就是一个数据库的问题,这里有一个开源代码,自己去研究一下吧。http://git.oschina.net/lionsoul/ip2region

nginx+geo+fastcgi_params

欢迎phper加入hnphper群 233415606

pecl install qqwry-beta
qqwry 你值得拥有。
IP其实并非是胡乱划分的。有心的话,你会发现。IP段和所在的地区是紧密结合的。你的隔壁城市和你的城市的IP可能为连续的。

相关标签: php ip http