是否可以从 PHP 中的用户 IP 地址获取位置详细信息。
有什么建议么 ??
谢谢
$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
)
您需要使用一些Geo IP Service
我在 google 上找到的一项免费服务:geoplugin。他们使用 php snipplets 来使用他们的服务:geoplugin/php
您可以查看maxmind 数据库和GeoIP PECL 扩展。
就我而言:
pecl install geoip
”安装了扩展/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
就我而言,这是真的:我确实在法国里昂市。
查看PEAR GeoIP 库。
最初的问题仍然与许多人相关;现在是 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 更广泛。
请注意,在尝试获取访问者的其他地址和州详细信息等时,我强烈建议以访问者可以进行更正的方式显示它;以免他们失望地离开。
问候。
$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
)
您可以为此使用一些 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;
我最近发现了PHP GeoIPLocation 库
它是您需要包含在 PHP 脚本中的单个 PHP 文件。它会自动搜索更新良好的数据库并为您返回国家/地区详细信息。