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

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

WBOY
WBOYasal
2016-08-18 09:16:001318semak imbas

我很好奇的是哪些根据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中加入:

<code>extension=geoip.so
geoip.custom_directory="/usr/share/GeoIP"
</code>

免费下载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

<code><?php print_r(geoip_record_by_name('106.37.165.80')); 回车后按Ctrl+D运行
Array
(
    [continent_code] => 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
)
</code>

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可能为连续的。

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn