
Estoy usando Cpanel, me gustaría mostrar el nombre del país y la ciudad en la página de inicio de sesión, algo como esto: Por ejemplo:
Your IP address is : xxx.xxx.xxx.xxx
Your Country name is: USA
Your City name is: Seattle
Para obtener la información anterior, solo puedo mostrar la dirección IP siguiendo el código php:
<?php echo $_SERVER['REMOTE_ADDR']; ?>
¿Cómo mostrar otra información del usuario, como el nombre del país y el nombre de la ciudad?
Por favor guíame paso a paso cómo hacerlo.
Respuesta1
Probablemente querrás utilizar unAPI de ubicación geográfica.
ipinfo.ioproporciona una interfaz de devolución de texto simple pero, como muchas API de geolocalización, requiere versiones pagas del servicio si excede ciertas limitaciones (es decir, en el caso de ipinfo.io, requiere más de 1000 solicitudes/día o SSL).
Usando la versión no JSON de ipinfo.io como ejemplo, su código PHP podría verse así:
<?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;
?>
Puede omitir todas las líneas con //, ya que son solo comentarios/ejemplos. Del mismo modo, las líneas de visualización de errores (ini_set/error_reporting) son solo para depuración. Los períodos antes y después de las variables son necesarios para la concatenación. Las URL se concatenan a
Ex. http://ipinfo.io/123.123.123.123/city
y devolver texto sin formato en este formulario. Revisar lapágina de desarrolladores de ipinfo.iopara obtener algunas ideas más sobre lo que se puede devolver. El código anterior devuelve:
Ex.
Your IP address is : xxx.xxx.xxx.xxx
Your Country name is: US
Your City name is: Las Vegas
Alternativamente, si desea "Estados Unidos" frente a "EE. UU.", puede probar también algo comoDetalles de la ciudad de GeobytesAPI heredada. Para devolver "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 es solo un código de ejemplo ligeramente modificado de la página de Geobytes. Tal como está escrito, duplica el resultado del primer ejemplo de código pero con el nombre completo del país:
Ex.
Your IP address is : xxx.xxx.xxx.xxx
Your Country name is: United States
Your City name is: Las Vegas
Como nota al margen, la API de Geobytes parece admitir algunas opciones más que ipinfo.io y permite unamuchotasa de solicitud no pagada más alta (si eso importa).