84669인 학습
152542인 학습
20005인 학습
5487인 학습
7821인 학습
359900인 학습
3350인 학습
180660인 학습
48569인 학습
18603인 학습
40936인 학습
1549인 학습
1183인 학습
32909인 학습
我很好奇的是哪些根据ip获取地理位置的工具都是什么原理?ip中每位数字都代表了什么?我可以在本地不使用第三方接口的情况下完成这一任务吗?
走同样的路,发现不同的人生
什么是ISP呢?简单点理解就像是类似中国电信、联通、移动等网络供应商。有了供应商了就可以上网了,上网你将能通过MODEM获取一个临时IP(周期性变化)。但是这个IP是真的就随机给的吗?怎么随机的呢?APNIC(亚太互联网络信息中心),就是这个组织了。是现在在世界中操作的五个地区的因特网登记处之一,分配B类IP地址的国际组织。它提供全球性的支持互联网操作的分派和注册服务。这些成员包括网络服务提供商、全国互联网登记, 和相似的组织的一个非营利, 基于会员资格的组织。APNIC 负责亚洲太平洋区域,包含 56 经济区。
假设,APNIC给中国分配了100万个IP地址。然后到国内,经由国内的顶级管理组织(不知道是谁)再分配给电信、移动、联通、移动等顶级ISP。然后这些ISP呢,再按照自己的规则给全国不同省份再分配,再到市、县、乡镇等。
IP地址每个数字并不代表什么,国内顶级ISP的IP分配是公开的,因此只有拿到这个库,才能根据用户的IP来知道用户是什么位置的由于这个库的更新并不及时,所以并不100%准确
国内比较流行的IP库就是纯真了。官网:http://www.cz88.net/ 右上角可以下载。安装后在目录下有个.dat的文件就是IP分配数据库了。结合PHP的使用和其他语言的使用百度一搜就有。
.dat
PHP安装GeoIP扩展和数据库根据IP获取访客所在国家/城市/经纬度等信息http://php.net/manual/zh/ref....sudo apt-get install libgeoip-devpecl install geoip-1.1.0注意:Beta版要指定版本号.如果是apt安装的PHP,直接安装php5-geoip这个包即可.php.ini中加入:
sudo apt-get install libgeoip-dev
pecl install geoip-1.1.0
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.gzsudo mkdir -v /usr/share/GeoIPsudo mv -v GeoLiteCity.dat /usr/share/GeoIP/GeoIPCity.dat
测试:php -a
<?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 )
PHP轻松实现"附近的人"功能,根据IP确定经纬度,根据经纬度计算距离
不使用第三方接口,也需要使用第三方提供的IP库进行匹配查询。但是都不嫩达到100%的准确。
推荐一个既提供接口也提供IP库的服务商:http://www.ipip.net/
他们都有自己IP库的。除非你本地也有IP库
第三方接口能通过ip获取地理位置信息, 其实是其本地保存了ip => address -info 的数据库映射, 因为他们的数据库里保存了大量的ip和地理位置的关系, 所以才能为我们提供第三方服务
ip
ip => address -info
当然, 你完全可以自己去实现, 但是你可能没有那么庞大的数据库支持
你若还是不想请求第三方接口, 可以下载一个
免费的GeoIP数据库
这就是一个数据库的问题,这里有一个开源代码,自己去研究一下吧。http://git.oschina.net/lionsoul/ip2region
nginx+geo+fastcgi_params
欢迎phper加入hnphper群 233415606
pecl install qqwry-betaqqwry 你值得拥有。IP其实并非是胡乱划分的。有心的话,你会发现。IP段和所在的地区是紧密结合的。你的隔壁城市和你的城市的IP可能为连续的。
pecl install qqwry-beta
什么是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中加入:
免费下载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
PHP轻松实现"附近的人"功能,根据IP确定经纬度,根据经纬度计算距离
不使用第三方接口,也需要使用第三方提供的IP库进行匹配查询。
但是都不嫩达到100%的准确。
推荐一个既提供接口也提供IP库的服务商:http://www.ipip.net/
他们都有自己IP库的。除非你本地也有IP库
第三方接口能通过
ip
获取地理位置信息, 其实是其本地保存了ip => address -info
的数据库映射, 因为他们的数据库里保存了大量的ip
和地理位置的关系, 所以才能为我们提供第三方服务当然, 你完全可以自己去实现, 但是你可能没有那么庞大的数据库支持
你若还是不想请求第三方接口, 可以下载一个
这就是一个数据库的问题,这里有一个开源代码,自己去研究一下吧。http://git.oschina.net/lionsoul/ip2region
nginx+geo+fastcgi_params
欢迎phper加入hnphper群 233415606
pecl install qqwry-beta
qqwry 你值得拥有。
IP其实并非是胡乱划分的。有心的话,你会发现。IP段和所在的地区是紧密结合的。你的隔壁城市和你的城市的IP可能为连续的。