2011-03-22 46 views

回答

14

有第三方解决方案Ipinfodb是一个我在过去使用的,我认为他们可以使用

+2

嗨,我同意Ipinfodb让你当前的位置起作用,就像魅力一样。但有一点,我想知道如何安全地连接到api?获取当前位置的页面位于https中,并且连接到api位于http中。它给了我一个警告信息,指出网站有一些不安全的内容。对于开发者而言,我知道它并不令人担忧,但对用户来说,这可能会让他们感到震惊,因为他们没有任何关于它的技术信息。 – user1149244 2013-03-21 07:29:49

3

MaxMind GeoIP是一个良好的服务。他们也有免费的城市级查询服务。

+0

尽管此链接可能会回答问题,但最好在此处包含答案的重要部分并提供供参考的链接。如果链接页面更改,则仅链接答案可能会失效。 – 2017-04-24 19:30:20

3

你可能想看看GeoIP Country Whois LocatorPHPClasses发现了一个PHP库。

+0

尽管这个链接可能回答这个问题,但最好在这里包含答案的基本部分,并提供供参考的链接。如果链接页面更改,则仅链接答案可能会失效。 – 2017-04-24 19:30:38

9

使用hostip.info服务试试这个代码:

$country=file_get_contents('http://api.hostip.info/get_html.php?ip='); 
echo $country; 

// Reformat the data returned (Keep only country and country abbr.) 
$only_country=explode (" ", $country); 

echo "Country : ".$only_country[1]." ".substr($only_country[2],0,4); 
+0

而不是爆炸回报你可以使用json作为回报。 http://api.hostip.info/get_json.php – Underdog 2014-10-08 11:56:04

+0

$ json_string ='http://api.hostip.info/get_json.php?ip='.$_SERVER['REMOTE_ADDR']; $ jsondata = file_get_contents($ json_string); $ obj = json_decode($ jsondata,true); – Underdog 2014-10-08 12:02:52

+0

该站点无法使用。 – Rohlik 2017-09-02 09:32:10

0

的IP给你一个相当不可靠的位置,你可以在与JS负载AJAX的位置,如果它是不是第一次有位置的关键。 (此外,用户需要的给你它的存取权限。)

Html5 Geolocation

+0

尽管这个链接可能回答这个问题,但最好在这里包含答案的重要部分,并提供供参考的链接。如果链接页面更改,则仅链接答案可能会失效。 – 2017-04-24 19:31:21

19
<?php 
$user_ip = getenv('REMOTE_ADDR'); 
$geo = unserialize(file_get_contents("http://www.geoplugin.net/php.gp?ip=$user_ip")); 
$country = $geo["geoplugin_countryName"]; 
$city = $geo["geoplugin_city"]; 
?> 
+0

作品,但不是那么准确 – partho 2016-09-09 15:29:33

+2

Geoplugin不是最好的平台。它限制在每分钟120次的动作。它适用于我,但最近它开始显示403来自我的服务器的所有请求。谁知道为什么。 (我没有在一分钟内完成这120个连接) – Soaku 2017-03-30 17:18:38

+1

没有这些限制。 – 2017-06-09 06:58:57

1

为PHP依赖于服务器,实时定位不能仅仅提供静态位置可以提供它是最好避免依赖于JS的位置,而不是使用PHP。但是,有必要对JS数据发布到PHP,以便它可以很容易地可以接触到服务器

16
<?php  
function get_client_ip() { 
     $ipaddress = ''; 
     if (isset($_SERVER['HTTP_CLIENT_IP'])) 
      $ipaddress = $_SERVER['HTTP_CLIENT_IP']; 
     else if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])) 
      $ipaddress = $_SERVER['HTTP_X_FORWARDED_FOR']; 
     else if(isset($_SERVER['HTTP_X_FORWARDED'])) 
      $ipaddress = $_SERVER['HTTP_X_FORWARDED']; 
     else if(isset($_SERVER['HTTP_FORWARDED_FOR'])) 
      $ipaddress = $_SERVER['HTTP_FORWARDED_FOR']; 
     else if(isset($_SERVER['HTTP_FORWARDED'])) 
      $ipaddress = $_SERVER['HTTP_FORWARDED']; 
     else if(isset($_SERVER['REMOTE_ADDR'])) 
      $ipaddress = $_SERVER['REMOTE_ADDR']; 
     else 
      $ipaddress = 'UNKNOWN'; 
     return $ipaddress; 
    } 
$PublicIP = get_client_ip(); 
$json = file_get_contents("https://freegeoip.net/json/$PublicIP"); 
$json = json_decode($json ,true); 
$country = $json['country_name']; 
$region= $json['region_name']; 
$city = $json['city']; 

?> 
+2

虽然此代码可能会回答问题,但提供关于此代码为何和/或如何回答问题的其他上下文可提高其长期价值。 – 2017-04-24 19:31:49

+0

谢谢Jay Balnchard,我会记住 – NaveenDA 2017-04-25 05:14:23

+0

有没有本地主机服务器的解决方法?我的IP地址不断出现:: 1 – Vince 2017-12-25 20:59:39

5
<?php 
$query = @unserialize (file_get_contents('http://ip-api.com/php/')); 
if ($query && $query['status'] == 'success') { 
echo 'Hey user from ' . $query['country'] . ', ' . $query['city'] . '!'; 
} 
foreach ($query as $data) { 
    echo $data . "<br>"; 
} 
?> 

程序中使用此源试试这个代码。有用!

+4

做或不​​做。没有“尝试”。一个好的答案***将总是解释所做的事情以及为什么这样做,不仅是为了OP,还是为了将来访问SO。 – 2017-04-24 19:31:04