我希望我的网站能够找到计算机位置,因此如果有人从伦敦或曼彻斯特等地访问我的网站,并根据计算机位置显示某个区域的用户。有点像在线约会网站,建议您所在地区的用户。
我一直在关注这个GEOIP数据库,该数据库列出了世界上所有城市。但我不知道接下来该做什么?我是否需要查看获取IP地址脚本以获取和比较GEOip数据库中的信息?
请有人指出我正确的方向。感谢。
GeoIP数据库来自: http://dev.maxmind.com/geoip/geolite
答案 0 :(得分:4)
请尝试以下代码。
$ip = $_SERVER['REMOTE_ADDR'];
echo $location = file_get_contents("http://api.hostip.info/country.php?ip=$ip");
请勿在您的localhost中尝试此操作。它将给出ip 127.0.0.1。
echo $location= file_get_contents("http://api.hostip.info/country.php?ip=12.215.42.19");
//outputs US
答案 1 :(得分:4)
PHP具有GeoIP的内置函数
这个功能可能特别有用,因为它将以阵列形式返回大陆,国家,城市等。
使用$_SERVER['REMOTE_ADDR']
作为您的IP。
$record = geoip_record_by_name( $_SERVER['REMOTE_ADDR']);
答案 2 :(得分:4)
这取决于您的需要。我建议您使用Web服务,这样您就不必担心托管数据库并自行维护。您需要做的就是解析访问者的IP地址并立即获得结果。我正在使用this site中的IP2location网络服务。
答案 3 :(得分:1)
我在我的网站上使用过这个PHP。非常快速和易于消化(xml等):http://www.geoplugin.com/
答案 4 :(得分:1)
请注意,此数据库为:In our recent tests, the GeoIP databases tested at 99.8% accurate on a country level, 90% accurate on a state level in the US, and 83% accurate for cities in the US within a 40 kilometer radius.
我会查看类似:PEAR GeoLite库
在php中使用此库的快速片段:
$geoip = Net_GeoIP::getInstance(dirname(__FILE__) . '/data/GeoLiteCity.dat');
$ipaddress = '72.30.2.43'; // Yahoo!
$location = $geoip->lookupLocation($ipaddress);
var_dump($location);
输出将显示,类似于:
object(Net_GeoIP_Location)[2]
protected 'aData' =>
array
'countryCode' => string 'US' (length=2)
'countryCode3' => string 'USA' (length=3)
'countryName' => string 'United States' (length=13)
'region' => string 'CA' (length=2)
'city' => string 'Sunnyvale' (length=9)
'postalCode' => string '94089' (length=5)
'latitude' => float 37.4249
'longitude' => float -122.0074
'areaCode' => int 408
'dmaCode' => float 807
答案 5 :(得分:0)
您可能已经安装了GEOIP作为PECL扩展程序。如果不这样做,那么您可以自己安装。
如果您需要比国家/地区更具体的内容,您需要付费才能获得数据库,但功能仍然存在。
答案 6 :(得分:0)
您可以使用https://geoip-db.com的服务。一个php JSONP示例,它返回给定IP地址的位置。
<?php
$json = file_get_contents('https://geoip-db.com/jsonp/82.196.6.158');
$data = jsonp_decode($json);
print $data->country_code . '<br>';
print $data->country_name . '<br>';
print $data->state . '<br>';
print $data->city . '<br>';
print $data->postal . '<br>';
print $data->latitude . '<br>';
print $data->longitude . '<br>';
print $data->IPv4 . '<br>';
function jsonp_decode($jsonp, $assoc = false) {
if($jsonp[0] !== '[' && $jsonp[0] !== '{') {
$jsonp = substr($jsonp, strpos($jsonp, '('));
}
return json_decode(trim($jsonp,'();'), $assoc);
}
?>