ホームページ  >  に質問  >  本文

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

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

怪我咯怪我咯2771日前307

全員に返信(8)返信します

  • PHP中文网

    PHP中文网2017-04-11 09:56:31

    什么是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的使用和其他语言的使用百度一搜就有。

    返事
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-11 09:56:31

    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

    <?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确定经纬度,根据经纬度计算距离

    返事
    0
  • PHPz

    PHPz2017-04-11 09:56:31

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

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

    返事
    0
  • PHP中文网

    PHP中文网2017-04-11 09:56:31

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

    返事
    0
  • 天蓬老师

    天蓬老师2017-04-11 09:56:31

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

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

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

    免费的GeoIP数据库

    返事
    0
  • PHP中文网

    PHP中文网2017-04-11 09:56:31

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

    返事
    0
  • 黄舟

    黄舟2017-04-11 09:56:31

    nginx+geo+fastcgi_params

    欢迎phper加入hnphper群 233415606

    返事
    0
  • 阿神

    阿神2017-04-11 09:56:31

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

    返事
    0
  • キャンセル返事