2011-03-22 50 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