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)?
<?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
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
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
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);
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.
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).
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
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