代码之家  ›  专栏  ›  技术社区  ›  Biranchi

在PHP中从IP获取位置详细信息

  •  6
  • Biranchi  · 技术社区  · 15 年前

    是否可以从PHP中的用户IP地址获取位置详细信息?

    有什么建议吗??

    谢谢

    7 回复  |  直到 6 年前
        1
  •  6
  •   David Barnes    15 年前
    $ip = '98.229.152.237';
    $xml = simplexml_load_file("http://ipinfodb.com/ip_query.php?ip=$ip");
    print_r($xml);
    

    输出:

    SimpleXMLElement Object
    (
        [Ip] => 98.229.152.237
        [Status] => OK
        [CountryCode] => US
        [CountryName] => United States
        [RegionCode] => 33
        [RegionName] => New Hampshire
        [City] => Manchester
        [ZipPostalCode] => 03103
        [Latitude] => 42.9403
        [Longitude] => -71.4435
        [Timezone] => -5
        [Gmtoffset] => -5
        [Dstoffset] => -4
    )
    
        2
  •  4
  •   Amirshk    15 年前

    你需要使用一些 Geo IP Service

    我在谷歌上找到了一个免费服务: geoplugin . 他们使用PHP截图来使用他们的服务: geoplugin/php

        3
  •  3
  •   Pascal MARTIN    15 年前

    你可以看看 maxmind database GeoIP PECL extension .

    在我看来:

    • 我已经安装了扩展 pecl install geoip
    • 我已经下载了 geolitecity database 并复制到 /usr/share/GeoIP/GeoIPCity.dat 所以它是由pecl扩展找到的。

    注意还有一些梨包( PEAR::Net_GeoIP )为了帮助您,如果您无法安装任何PECL扩展。


    一旦安装了这两种代码,就可以使用这种代码:

    $ip = '82.229.x.y';     // replace with your IP address
    var_dump(geoip_record_by_name($ip));
    

    你会得到这样的输出:

    array
      'continent_code' => string 'EU' (length=2)
      'country_code' => string 'FR' (length=2)
      'country_code3' => string 'FRA' (length=3)
      'country_name' => string 'France' (length=6)
      'region' => string 'B9' (length=2)
      'city' => string 'Lyon' (length=4)
      'postal_code' => string '' (length=0)
      'latitude' => float 45.75
      'longitude' => float 4.84999990463
      'dma_code' => int 0
      'area_code' => int 0
    

    在我看来,这是真的:我确实在法国里昂市。

        4
  •  1
  •   Daniel Schilling Aaron Palmer    15 年前
        5
  •  1
  •   Wombat_RW    8 年前

    最初的问题仍然与许多人有关;现在是2016年底)。

    经过多年的地理定位经验,我的答案是…

    真正报告“国家”以外的位置细节是不可靠的。所有信息都是从IP ISP注册中收集的,主要数据供应商定期更新和传递的相关信息。由于知识产权被放弃或购买,供应商必须获得有关企业(即ISP)注册/变更的详细信息。大多数数字是以“块”的形式获得的,但并非所有数字都与同一台服务器相关。

    *很多(如果不是大多数?)在向公众提供信息的小型私掠者网站中,使用“MaxMind”免费数据库并(不正确地)将其传递给公众;阅读MaxMind警告。较小的网站没有持续更新权限注册的资源。

    免费的MaxMind和“ip2location”DBS是他们支付数据库的一个较小的子集;请参阅他们的注意事项以了解缺少什么。

    许多购买的IP块在任何数量的服务器上共享,这会导致信息模糊。当使用到ISP的无线网络连接时,与可能稳定的有线ADSL/CABLE/BLAH连接相反,由于ISP网络服务器(中继)的广泛部署,错误A可能会非常令人吃惊;在大多数情况下,会话之间甚至在每个会话期间都会发生非静态的变化。

    例如,当使用漫游无线笔记本电脑加密狗进行ISP连接时,我经常被引用为处于另一种状态,它可以(在AU中)在离我实际位置几百到几千公里的任何地方。

    你能。。。用PHP ?

    使用主要的两个DB供应商(ie ip2location.com),您将可以访问可用的服务器端脚本,这些脚本可用于获取必要的信息。我使用ip2location的db1来获取访问者“country”,而不是从他们那里获得一个不太可靠的免费数据库,我只能通过perl和php来做我想做的事情。

    我还自动下载和解压缩,根据使用注意事项,二进制数据库每月更新后。显然,从自己的站点访问查询可以克服远程按需采集和处理的问题。

    根据我的要求,ip2location full db每年要比maxmind便宜得多。*然而,maxmind-free数据库比ip2location-free数据库更广泛。

    注意:当试图获取访客的附加地址和状态详细信息等时,我强烈建议以访客可以更正的方式显示,以免他们离开时感到沮丧。

    当做。

        6
  •  0
  •   RajeshPalande    10 年前
     $ip = "66.96.147.144";
        $geoPlugin_array = unserialize(file_get_contents('http://www.geoplugin.net/php.gp?ip=' . $ip) );
        echo '<pre>';
        print_r($geoPlugin_array);
    
    OUTPUT :
    Array
    (
        [geoplugin_request] => 66.96.147.144
        [geoplugin_status] => 200
        [geoplugin_credit] => Some of the returned data includes GeoLite data created by MaxMind, available from http://www.maxmind.com.
        [geoplugin_city] => Burlington
        [geoplugin_region] => MA
        [geoplugin_areaCode] => 781
        [geoplugin_dmaCode] => 506
        [geoplugin_countryCode] => US
        [geoplugin_countryName] => United States
        [geoplugin_continentCode] => NA
        [geoplugin_latitude] => 42.5051
        [geoplugin_longitude] => -71.204697
        [geoplugin_regionCode] => MA
        [geoplugin_regionName] => Massachusetts
        [geoplugin_currencyCode] => USD
        [geoplugin_currencySymbol] => $
        [geoplugin_currencySymbol_UTF8] => $
        [geoplugin_currencyConverter] => 1
    )
    
        7
  •  -1
  •   Jess    6 年前

    我最近发现 PHP GeoIPLocation Library

    它是一个单独的PHP文件,需要包含在您的PHP脚本中。它会自动搜索更新良好的数据库,并为您返回国家详细信息。