2014-02-19 95 views
5

我有國家的IP範圍。我檢查這個範圍內的用戶IP地址是否正確,然後他能夠看到該網站,否則他不會。 我使用下面的代碼,如何在PHP中使用IP地址查找國家?

$ip = $_SERVER['REMOTE_ADDR']; 
    if(ip2long($ip) >= $ipstart && ip2long($ip) <= $ipend){ 
     return true; 
    } 

我的問題是,如果有人來自不同的國家想與ABC他的筆記本電腦/筆記本電腦到另一國假設XYZ那麼將上面的代碼工作?在同一檯筆記本電腦上。

對於ipv4和ipv6,上述場景如何可能?

[編輯]

哪個IP地址$_SERVER['REMOTE_ADDR']取,不會是本機的IP或IP連接,這樣我們就可以知道他現在在這個國家?

謝謝

+0

您將需要一個第三方的API IP國表從查找 –

+0

使用此 $ countryName = geoip_country_name_by_name($ _ SERVER ['REMOTE_ADDR']); PHP建立尋找國名的方法 – Haris

+0

[IPLocate.io](https://www.iplocate.io)提供了一個免費的API:https://www.iplocate.io/api/lookup/8.8.8.8 - 例子在PHP:'$ result = json_decode(file_get_contents('https://www.iplocate.io/api/lookup/8.8.8.8')); echo $ result-> country;' - 免責聲明:我運行此服務。 – ttarik

回答

1

Php沒有這個功能。你應該建立一個數據庫或者只是使用一個外部API來發現。

http://ip-api.com 這是一個很好的/免費的。 只是從那個解析響應。

6

使用這個API http://ipinfo.io

function ip_details($IPaddress) 
    { 
     $json  = file_get_contents("http://ipinfo.io/{$IPaddress}"); 
     $details = json_decode($json); 
     return $details; 
    } 

    $IPaddress = $_SERVER['REMOTE_ADDR']; 

    $details = ip_details("$IPaddress"); 

    //echo $details->city; #Tamilnadu 
    //echo $details->country; 
    //echo $details->org;  
    //echo $details->hostname; 
1

看到這個link

您可以使用此功能找到IP國名,

function getLocationInfoByIp($ip_addr) 
{ 
    $return_data = array('country'=>'', 'city'=>''); 
    $ip_data = @json_decode(file_get_contents("http://www.geoplugin.net/json.gp?ip=".$ip_addr)); 
    if($ip_data && $ip_data->geoplugin_countryName != null) 
    { 
     $return_data['country'] = $ip_data->geoplugin_countryCode; 
     $return_data['city'] = $ip_data->geoplugin_city; 
    } 
    return $return_data; 
} 

通IP地址在此功能,你將獲得國家信息...

對於IP地址,你可以用下面的地址作爲IP地址中的一個,

$client_ip = @$_SERVER['HTTP_CLIENT_IP']; 
$forward_ip = @$_SERVER['HTTP_X_FORWARDED_FOR']; 
$remote_ip = @$_SERVER['REMOTE_ADDR']; 

希望這將幫助你...

+0

感謝您的回覆,我有一個問題,哪個IP地址$ _SERVER ['REMOTE_ADDR']提取機器IP或連接IP? – Sachin

+0

你可以在鏈接中看到我在我的答案中附加了... –

+0

我已經使用了上面的例子,當看到不同設備中的不同結果時我感到震驚,只有'$ _SERVER ['REMOTE_ADDR'];'給出結果。對於我的臺式電腦,它給國** IN **,在我的移動與沃達豐SIM卡它給** **和使用Uninor SIM卡給我**美國** – Sachin