从PHP获取IP的位置详细信息

时间:2009-12-02 05:29:40

标签: php geoip ip-geolocation

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

有什么建议吗?

由于

7 个答案:

答案 0 :(得分:6)

$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
)

答案 1 :(得分:4)

您需要使用Geo IP Service

的某些动作

我在google上发现了一项免费服务:geoplugin。 他们使用php snipplet来使用他们的服务:geoplugin/php

答案 2 :(得分:3)

您可以查看maxmind databaseGeoIP PECL extension

就我而言:

  • 我已使用“pecl install geoip
  • 安装了扩展程序
  • 我已下载geolitecity database并将其复制到/usr/share/GeoIP/GeoIPCity.dat,以便PECL扩展程序找到它。

请注意,如果您无法安装任何PECL扩展程序,还应该有一些PEAR包(PEAR::Net_GeoIP)来帮助您。


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

$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

在我的情况下,这是真的:我确实在佛罗里达州的里昂市。

答案 3 :(得分:1)

答案 4 :(得分:1)

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

经过多年的GEO定位经验,我的答案如下......

“国家/地区”之外的位置详细信息的实际报告是不可靠的。所有信息都来自IP#ISP注册,这是相关信息,由主要数据供应商定期更新和传递。随着IP#的丢弃或购买,供应商必须获得有关企业(即ISP)注册/变更的详细信息。大多数数字是以“块”获得的,但不一定都与同一服务器相关。

*许多(如果不是大多数?)向公众提供信息的较小的私人网站使用“Maxmind”免费数据库并且(不正确地)将其传递给公众;阅读Maxmind警告。较小的站点没有用于不断更新权限注册的资源。

免费的maxmind和“ip2location”DB是其付费数据库的一小部分;看看他们的注意事项,以解释缺少的东西。

在块中购买的许多IP#都是通过任意数量的服务器共享的,这会导致信息模糊。当使用到ISP的无线网络连接时,与可能稳定的有线ADSL / cable / blah连接相反,由于ISP网络服务器的特别广泛的布局(中继),错误可能非常令人吃惊;在大多数情况下,会话之间的非静态更改,甚至可能在每个会话期间更改。

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

你能用PHP 吗?

使用主要的数据库供应商(即ip2location.com),可以访问可用的服务器端脚本,这些脚本可用于获取必要的信息。而不是一个不太可靠的免费数据库,我使用ip2location的DB1获取访问者“国家”,我只能通过Perl和PHP做我想做的事。

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

根据我的要求,ip2location FULL db比每年的Maxmind便宜得多。 *但是,Maxmind FREE db比ip2location FREE DB更广泛。

注意尝试获取访问者的其他地址和状态详细信息等时我强烈建议以访问者可以更正的方式显示;以免他们感到沮丧。

问候。

答案 5 :(得分:0)

 $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
)

答案 6 :(得分:-1)

我最近发现了PHP GeoIPLocation Library

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