
Estou usando o Cpanel, gostaria de mostrar o nome do país e o nome da cidade na página de login, algo assim: Por exemplo:
Your IP address is : xxx.xxx.xxx.xxx
Your Country name is: USA
Your City name is: Seattle
Para as informações acima, só posso mostrar o endereço IP seguindo o código php:
<?php echo $_SERVER['REMOTE_ADDR']; ?>
Como mostrar outras informações do usuário, como nome do país e nome da cidade?
Por favor, me guie passo a passo como fazer isso.
Responder1
Você provavelmente desejará usar umAPI de geolocalização.
ipinfo.iofornece uma interface simples de retorno de texto simples, mas, como muitas APIs de geolocalização, requer versões pagas do serviço se você exceder certas limitações (ou seja, no caso do 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 ser semelhante a:
<?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 erros (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. Os URLs concatenam para
Ex. http://ipinfo.io/123.123.123.123/city
e retorne texto simples neste formato. Confira apágina de desenvolvedores ipinfo.iopara mais algumas ideias sobre o que pode ser devolvido. 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
Alternativamente, se você quiser "Estados Unidos" versus "EUA", você pode tentar também algo como oDetalhes da cidade de GeobytesAPI 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 está 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 lateral, a API Geobytes parece suportar mais algumas opções do que ipinfo.io e permite ummuitotaxa de solicitação não paga mais alta (se isso for importante).