簡體   English   中英

按IP地址識別用戶的位置

[英]Identifying user's location by IP address

我正在編寫一個程序,我希望自動識別用戶的國家/地區。 我編寫了代碼來獲取ip並將其存儲在DB中。

$ip = gethostbyname($_SERVER['REMOTE_ADDR']);

儲存:

 <?php `$result = mysql_query("INSERT INTO `wh_order` (`name`, `email`, `contact`, `itemid`, `itemquantity`, `ip`,`message`, `date`) VALUES('".$name."','".$email."','".$contact."','".$itemid."','".$itemquantity."','".$ip."','".$message."', NOW())");` ?>

另外,這是存儲IP地址的最佳方法嗎?

首先,gethostbyname不會給你一個國家。 你不得不求助於地理定位。 一個有效的免費服務是http://freegeoip.net 他們提供API:

http://freegeoip.net/json/74.125.143.104

哪個回報:

{
    "city": "Mountain View",
    "region_code": "CA",
    "region_name": "California",
    "metrocode": "807",
    "zipcode": "94043",
    "longitude": "-122.057",
    "latitude": "37.4192",
    "country_code": "US",
    "ip": "74.125.227.136",
    "country_name": "United States"
}

請注意,IP地理定位不會100%准確。


存儲IP地址的最佳列類型是INT(10) unsigned ,這將比varchar列占用更少的空間。 使用INET_ATONINET_NTOA可以輕松處理轉換:

mysql> SELECT INET_ATON('10.0.5.9');
        -> 167773449

mysql> SELECT INET_NTOA(167773449);
        -> '10.0.5.9'

您可以將maxmind(http://www.maxmind.com/app/country)的數據庫與apache或nginx擴展結合使用。

或者,這個任務有一個很好的庫: http//geocoder-php.org/

通過IP識別用戶的位置稱為地理位置 它通常需要一個將IP地址范圍映射到地理位置的數據庫。

Maxmind公司根據CreativeCommons許可免費提供名為GeoLite的數據庫

GeoLite數據庫根據知識共享署名 - 相同方式共享3.0 Unported許可進行許可。 提供商業許可。

他們有一個允許快速IP查找的apache模塊,但最簡單的入門方式可能是純PHP選項。 查看可能的集成方法列表。

下載檔案包括幾個例子,基本過程相當簡單:

$gi = geoip_open("GeoLite.dat", GEOIP_STANDARD);
$record = geoip_record_by_addr($gi, "24.24.24.24");
echo $record->latitude;
echo $record->longitude;

使用https://geoip-db.com的服務他們支持IPV4和IPV6地址來定位ip的地理位置。

例:

<!DOCTYPE html>
<html>
<head>
    <title>GEOIP DB - Geolocation by IP</title>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min.js">
    </script>
</head>
<body>
    <div>Country: <span id="country"></span>
    <div>State: <span id="state"></span>
    <div>City: <span id="city"></span>
    <div>Latitude: <span id="latitude"></span>
    <div>Longitude: <span id="longitude"></span>
    <div>IP: <span id="ip"></span>
    <script>
        $.ajax({
            url: "https://geoip-db.com/jsonp",
            jsonpCallback: "callback",
            dataType: "jsonp",
            success: function( location ) {
                $('#country').html(location.country_name);
                $('#state').html(location.state);
                $('#city').html(location.city);
                $('#latitude').html(location.latitude);
                $('#longitude').html(location.longitude);
                $('#ip').html(location.IPv4);  
            }
        });     
    </script>
</body>
</html>

這是一個jquery片段,雖然其他例子可以在他們的網站上找到(普通的javascript,php,C#)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM