Você provavelmente desejará usar uma API de geolocalização .
Oipinfo.io fornece uma interface simples de retorno de texto simples, mas, como muitas APIs de localização geográfica, requer versões pagas do serviço se você exceder certos limitações (ou seja, no caso de ipinfo.io , você precisa de mais de 1000 solicitações / dia ou SSL).
Usando a versão não-JSON do ipinfo.io como exemplo, seu código PHP pode parecer com:
<?php
// This turns on error display without messing with php.ini
// Delete the following two lines in production
ini_set('display_errors',1);
error_reporting(E_ALL);
// We avoid using $_SERVER['REMOTE_ADDR'] directly with a custom variable
$ip = $_SERVER['REMOTE_ADDR'];
// Otherwise, using the $_SERVER['REMOTE_ADDR'] directly
//$city = file_get_contents('http://ipinfo.io/'. $_SERVER['REMOTE_ADDR']. '/city');
// Using our custom $ip variable
$city = file_get_contents('http://ipinfo.io/'. $ip. '/city');
$country = file_get_contents('http://ipinfo.io/'. $ip. '/country');
//$region = file_get_contents('http://ipinfo.io/'. $ip. '/region');
// An alternate formatting of City State, Country
//echo $city.' '.$region.', ' .$country;
// Print our variables. <br> is a standard HTML line break.
echo 'Your IP address is: '.$ip;
echo '<br>';
echo 'Your Country name is: '.$country;
echo '<br>';
echo 'Your City name is: '.$city;
?>
Você pode omitir todas as linhas com //, pois são apenas comentários / exemplos. Da mesma forma, as linhas de exibição de erro (ini_set / error_reporting) são apenas para depuração. Os períodos antes e depois das variáveis são necessários para a concatenação. As URLs são concatenadas para
Ex. http://ipinfo.io/123.123.123.123/city
e retorne texto simples neste formulário. Confira a página dos desenvolvedores do ipinfo.io para mais algumas idéias sobre o que pode ser retornado. O código acima retorna:
Ex.
Your IP address is : xxx.xxx.xxx.xxx
Your Country name is: US
Your City name is: Las Vegas
Como alternativa, se você deseja "Estados Unidos" e "EUA", tente também tentar algo como Detalhes da cidade de Geobytes API legada. Para retornar "Estados Unidos":
<?php
function getIP() {
foreach (array('HTTP_CLIENT_IP', 'HTTP_X_FORWARDED_FOR', 'HTTP_X_FORWARDED', 'HTTP_X_CLUSTER_CLIENT_IP', 'HTTP_FORWARDED_FOR', 'HTTP_FORWARDED', 'REMOTE_ADDR') as $key) {
if (array_key_exists($key, $_SERVER) === true) {
foreach (explode(',', $_SERVER[$key]) as $ip) {
if (filter_var($ip, FILTER_VALIDATE_IP) !== false) {
return $ip;
}
}
}
}
}
$tags=json_decode(file_get_contents('http://getcitydetails.geobytes.com/GetCityDetails?fqcn='. getIP()), true);
// Prints all available members of the $tags array, in case we forget our options
//print_r($tags);
// $tags[geobytesipaddress]) creates a non-fatal error so we use '' quotes around the array elements.
print_r('Your IP address is: ' .$tags['geobytesipaddress']);
echo '<br>';
print_r('Your Country name is: ' .$tags['geobytescountry']);
echo '<br>';
print_r('Your City name is: ' .$tags['geobytescity']);
?>
Este é apenas um exemplo de código ligeiramente modificado da página Geobytes. Conforme escrito, ele duplica a saída do primeiro exemplo de código, mas com o nome completo do país:
Ex.
Your IP address is : xxx.xxx.xxx.xxx
Your Country name is: United States
Your City name is: Las Vegas
Como observação, a Geobytes API parece oferecer mais algumas opções do que o ipinfo.io e permite uma muito maior taxa de solicitações não pagas (se isso for importante).