6

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

有什么建议么 ??

谢谢

4

8 回答 8

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
)
于 2009-12-02T06:16:47.863 回答
4

您需要使用一些Geo IP Service

我在 google 上找到的一项免费服务:geoplugin。他们使用 php snipplets 来使用他们的服务:geoplugin/php

于 2009-12-02T05:36:26.573 回答
3

您可以查看maxmind 数据库GeoIP PECL 扩展

就我而言:

  • 我已经用“ pecl install geoip”安装了扩展
  • 我已经下载了geolitecity 数据库并将其复制到其中,/usr/share/GeoIP/GeoIPCity.dat以便 PECL 扩展可以找到它。

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


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

$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

就我而言,这是真的:我确实在法国里昂市。

于 2009-12-02T05:41:27.203 回答
1

查看PEAR GeoIP 库

于 2009-12-02T05:36:59.253 回答
1

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

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

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

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

免费的 maxmind 和“ip2location”数据库是其付费数据库的一小部分;请参阅他们的警告以解释缺少的内容。

许多以块购买的 IP#s 在任意数量的服务器上共享,这会导致信息不明确。当使用无线网络连接到 ISP 时,与可能稳定的有线 ADSL/cable/blah 连接相反,由于 ISP 网络服务器(中继)的特别广泛的放置,错误可能非常惊人;在大多数情况下,会话之间的非静态变化,甚至可能在每个会话期间发生一些变化。

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

你能...用 PHP吗?

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

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

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

请注意,在尝试获取访问者的其他地址和州详细信息等时,我强烈建议以访问者可以进行更正的方式显示它;以免他们失望地离开。

问候。

于 2016-10-27T18:47:28.063 回答
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
)
于 2015-07-24T10:36:04.750 回答
0

您可以为此使用一些 API 服务。

例如,https://apiip.net,他们的 API 提供了大量关于 IP 的信息,如果需要,您也可以请求 XML 响应。

简单的 GET 调用:

https://apiip.net/api/check?ip=67.250.186.196&accessKey={your_api_key}

代码示例:

// Set IP address and API access key
$ip = '67.250.186.196';
$access_key = 'YOUR_ACCESS_KEY';

// Initialize CURL
$ch = curl_init('https://apiip.net/api/check?ip='.$ip.'&accessKey='.$access_key.'');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

// Store the data
$json_res = curl_exec($ch);
curl_close($ch);

// Decode JSON response
$api_result = json_decode($json_res, true);

// Output the result
echo $api_result;
于 2022-02-12T19:46:58.213 回答
-1

我最近发现了PHP GeoIPLocation 库

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

于 2018-09-25T11:33:42.533 回答