GEOIP和获取计算机的IP地址位置?

时间:2012-10-31 15:32:53

标签: php ip

我希望我的网站能够找到计算机位置,因此如果有人从伦敦或曼彻斯特等地访问我的网站,并根据计算机位置显示某个区域的用户。有点像在线约会网站,建议您所在地区的用户。

我一直在关注这个GEOIP数据库,该数据库列出了世界上所有城市。但我不知道接下来该做什么?我是否需要查看获取IP地址脚本以获取和比较GEOip数据库中的信息?

请有人指出我正确的方向。感谢。

GeoIP数据库来自: http://dev.maxmind.com/geoip/geolite

7 个答案:

答案 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的内置函数

GeoIP library

这个功能可能特别有用,因为它将以阵列形式返回大陆,国家,城市等。

geoip_record_by_name

使用$_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);
    }
?>