Obtener la ubicación actual de un usuario

4 minutos de lectura

Avatar de usuario de Jacek Francuz
Jacek Francuz

¿Cómo puedo determinar la ubicación actual de un usuario según la dirección IP (supongo que funciona de esta manera)?

  • MaxMind GeoIP es un buen servicio También tienen un servicio gratuito de búsqueda a nivel de ciudad.

    – glomada

    22 de marzo de 2011 a las 22:35


  • Es posible que desee echar un vistazo a Localizador Whois de país GeoIP encontrado en Clases de PHP.

    – madkris24

    22 de marzo de 2011 a las 22:44

<?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"];
?>

  • Geoplugin no es la mejor plataforma. Está limitado a 120 acciones por minuto. Funcionó para mí, pero últimamente comenzó a mostrar 403 para todas las solicitudes de mi servidor. Quién sabe por qué. (No he hecho esas 120 conexiones en un minuto)

    usuario5147563

    30 de marzo de 2017 a las 17:18

  • Inútil con esos límites.

    –Michael Rogers

    9 de junio de 2017 a las 6:58

Avatar de usuario de Naveen DA
Naveen DA

editado

Cambiar freegeoip.net en ipinfo.io

<?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("http://ipinfo.io/$PublicIP/geo");
$json     = json_decode($json, true);
$country  = $json['country'];
$region   = $json['region'];
$city     = $json['city'];
?>

  • Si bien este código puede responder a la pregunta, proporcionar contexto adicional sobre por qué y/o cómo este código responde a la pregunta mejora su valor a largo plazo.

    – Jay Blanchard

    24/04/2017 a las 19:31

  • ¿Hay alguna solución para los servidores localhost? Mi dirección IP sigue apareciendo como ::1

    –Vince

    25 de diciembre de 2017 a las 20:59

  • @vince Localhost siempre devuelve :: 1 dirección IP

    – Naveen DA

    26 de diciembre de 2017 a las 2:29

  • mensaje_deprecacion: “Este extremo de la API está obsoleto y dejará de funcionar el 1 de julio de 2018. Para obtener más información, visite: github.com/apilayer/freegeoip#readme“,

    –Moisés Schwartz

    23 de mayo de 2018 a las 17:09

  • ¿Para qué es necesario verificar todas las ip reenviadas? Pensé solo comprobar if(isset(HTTP_X_FORWARDED_FOR)) es necesario.

    – klediooo

    18 de julio de 2019 a las 17:32

Avatar de usuario de Adnan Rasheed
Adnan Rashid

<?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>";
    }
?>

Prueba este código usando esta fuente. *¡Funciona!

  • Hacer o no hacer. Aquí no hay intentos”. A buena respuesta siempre tendrá una explicación de lo que se hizo y por qué se hizo de esa manera, no solo para el OP sino para los futuros visitantes de SO.

    – Jay Blanchard

    24/04/2017 a las 19:31

  • ¿Es una API gratuita?

    – Pisumathu

    27 de abril de 2022 a las 7:46

Avatar de usuario de Bedh
cama

Prueba este código usando el hostip.info servicio:

$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);

Avatar de usuario de Venkat Sai
Venkat Sai

Como PHP depende de un servidor, no se puede proporcionar la ubicación en tiempo real. Solo se puede proporcionar una ubicación estática. Es mejor evitar confiar en JavaScript para una ubicación en lugar de usar PHP.

Pero existe la necesidad de publicar los datos de JavaScript en PHP, para que un programa en el servidor pueda acceder fácilmente a ellos.

Avatar de usuario de Peter Mortensen
Pedro Mortensen

Una dirección IP le brinda una ubicación bastante poco confiable. Puede Ajax la ubicación al cargar con JavaScript si no es crítico tener la ubicación al principio. (Además, el usuario debe darte su permiso para acceder a él).

Geolocalización HTML5

Avatar de usuario de Peter Mortensen
Pedro Mortensen

El viejo La API de freegeoip ahora está obsoleta y se suspenderá el 2018-07-01.

La nueva API es de pila de ip. Tienes que crear la cuenta en ipstack. Luego puede usar la clave de acceso en la URL de la API.

$url = "http://api.ipstack.com/122.167.180.20?access_key=ACCESS_KEY&format=1";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_PROXYPORT, 3128);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
$response = curl_exec($ch);
curl_close($ch);
$response = json_decode($response);
$city  = $response->city; // You can get all the details like longitude, latitude from the '$response'.

Para más información, consultar en freegeoip (GitHub).

  • Este es un servicio pago.

    – usuario2060451

    7 de marzo de 2019 a las 2:00

  • La pregunta no es sobre el servicio gratuito.

    – lalithkumar

    7 de marzo de 2019 a las 6:30

  • tienen un libre. nivel limitado

    – Travesura Mental

    13 de junio de 2021 a las 17:55

¿Ha sido útil esta solución?