从 IP 地址获取位置 [已关闭]

2022-08-30 06:21:58

我想从访问者的IP地址中检索访问者的城市,州和国家/地区等信息,以便我可以根据他们的位置自定义我的网页。有没有一个好的和可靠的方法来做到这一点在PHP中?我使用JavaScript进行客户端脚本编写,PHP用于服务器端脚本,MySQL用于数据库。


答案 1

您可以下载免费的 GeoIP 数据库并在本地查找 IP 地址,也可以使用第三方服务并执行远程查找。这是更简单的选项,因为它不需要设置,但它确实引入了额外的延迟。

您可以使用的第三方服务是我的,http://ipinfo.io。它们提供主机名,地理位置,网络所有者和其他信息,例如:

$ curl ipinfo.io/8.8.8.8
{
  "ip": "8.8.8.8",
  "hostname": "google-public-dns-a.google.com",
  "loc": "37.385999999999996,-122.0838",
  "org": "AS15169 Google Inc.",
  "city": "Mountain View",
  "region": "CA",
  "country": "US",
  "phone": 650
}

下面是一个 PHP 示例:

$ip = $_SERVER['REMOTE_ADDR'];
$details = json_decode(file_get_contents("http://ipinfo.io/{$ip}/json"));
echo $details->city; // -> "Mountain View"

您也可以在客户端使用它。下面是一个简单的 jQuery 示例:

$.get("https://ipinfo.io/json", function (response) {
    $("#ip").html("IP: " + response.ip);
    $("#address").html("Location: " + response.city + ", " + response.region);
    $("#details").html(JSON.stringify(response, null, 4));
}, "jsonp");
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<h3>Client side IP geolocation using <a href="http://ipinfo.io">ipinfo.io</a></h3>

<hr/>
<div id="ip"></div>
<div id="address"></div>
<hr/>Full response: <pre id="details"></pre>

答案 2

以为我会发布,因为似乎没有人提供有关此特定API的信息,但它返回的正是我所追求的,您可以让它以多种格式返回, .json, xml and csv

 $location = file_get_contents('http://freegeoip.net/json/'.$_SERVER['REMOTE_ADDR']);
 print_r($location);

这将为您提供您可能想要的所有内容:

{
      "ip": "77.99.179.98",
      "country_code": "GB",
      "country_name": "United Kingdom",
      "region_code": "H9",
      "region_name": "London, City of",
      "city": "London",
      "zipcode": "",
      "latitude": 51.5142,
      "longitude": -0.0931,
      "metro_code": "",
      "areacode": ""

}

推荐