ubicacion rastrear por pais obtener localizar exacta direccion cual con celular php geolocation ip geoip

php - rastrear - Obtener la ubicación desde una dirección IP



obtener ubicacion con php (23)

Asumiendo que quiere hacerlo usted mismo y no depender de otros proveedores, IP2Nation proporciona una base de datos MySQL de las asignaciones que se actualizan a medida que los registros regionales cambian las cosas.

Deseo recuperar información como la ciudad, el estado y el país de un visitante desde su dirección IP, de modo que pueda personalizar mi página web de acuerdo con su ubicación. ¿Hay alguna manera buena y confiable de hacer esto en PHP? Estoy usando JavaScript para scripting del lado del cliente, PHP para scripting del lado del servidor y MySQL para la base de datos.


El servicio en la respuesta de Ben Dowling ha cambiado, por lo que ahora es más simple. Para encontrar la ubicación, simplemente hazlo:

// no need to pass ip any longer; ipinfo grabs the ip of the person requesting $details = json_decode(file_get_contents("http://ipinfo.io/")); echo $details->city; // city

Las coordenadas regresan en una sola cadena como ''31, -80 '', por lo que a partir de ahí usted simplemente:

$coordinates = explode(",", $details->loc); // -> ''31,-89'' becomes''31'',''-80'' echo $coordinates[0]; // latitude echo $coordinates[1]; // longitude


En caso de que alguien tropiece con este hilo, aquí hay otra solución. En timezoneapi.io puedes solicitar una dirección IP y obtener varios objetos a cambio (he creado el servicio). Fue creado porque necesitaba saber en qué zona horaria estaban mis usuarios, en qué parte del mundo y en qué momento se encontraba.

En PHP: ubicación de devoluciones, zona horaria y fecha / hora:

// Get IP address $ip_address = getenv(''HTTP_CLIENT_IP'') ?: getenv(''HTTP_X_FORWARDED_FOR'') ?: getenv(''HTTP_X_FORWARDED'') ?: getenv(''HTTP_FORWARDED_FOR'') ?: getenv(''HTTP_FORWARDED'') ?: getenv(''REMOTE_ADDR''); // Get JSON object $jsondata = file_get_contents("http://timezoneapi.io/api/ip/?" . $ip_address); // Decode $data = json_decode($jsondata, true); // Request OK? if($data[''meta''][''code''] == ''200''){ // Example: Get the city parameter echo "City: " . $data[''data''][''city''] . "<br>"; // Example: Get the users time echo "Time: " . $data[''data''][''datetime''][''date_time_txt''] . "<br>"; }

Usando jQuery:

// Get JSON object $.getJSON(''https://timezoneapi.io/api/ip'', function(data){ // Request OK? if(data.meta.code == ''200''){ // Log console.log(data); // Example: Get the city parameter var city = data.data.city; alert(city); // Example: Get the users time var time = data.data.datetime.date_time_txt; alert(time); } });


Escribí este artículo hace unos meses y podría ser útil para ti. El artículo describe el uso de la base de datos de código abierto del país ip 2 y también describe sobre una clase php que escribí para que funcione la base de datos de código abierto. Aqui esta el link
http://www.samundra.com.np/find-visitors-country-using-his-ip-address/1018

Si necesita ayuda con respecto a esto, por favor déjenme comentar en el sitio.

Espero que te ayude


Escribí un bot usando una API de ipapi.co , así es cómo se puede obtener la ubicación de una dirección IP (por ejemplo, 1.2.3.4 ) en php :

Establecer encabezado:

$opts = array(''http''=>array(''method''=>"GET", ''header''=>"User-Agent: mybot.v0.7.1")); $context = stream_context_create($opts);

Obtener respuesta JSON

echo file_get_contents(''https://ipapi.co/1.2.3.4/json/'', false, $context);

de obtener un campo específico (país, zona horaria, etc.)

echo file_get_contents(''https://ipapi.co/1.2.3.4/country/'', false, $context);


Esta pregunta está protegida, lo cual entiendo. Sin embargo, no veo una respuesta aquí, lo que veo es que mucha gente muestra lo que se les ocurrió al tener la misma pregunta.

Actualmente hay cinco Registros Regionales de Internet con diversos grados de funcionalidad que sirven como el primer punto de contacto con respecto a la propiedad de la propiedad intelectual. El proceso está en constante cambio, por lo que los diversos servicios aquí funcionan a veces y no en otros momentos.

Who Is es (obviamente) un antiguo protocolo TCP, sin embargo, la forma en que funcionaba originalmente era mediante la conexión al puerto 43, lo que hace que sea problemático conseguir que se enrute a través de conexiones arrendadas, a través de firewalls, etc.

En este momento, la mayoría de los Who Is se realiza a través de HTTP RESTful y ARIN, RIPE y APNIC tienen servicios RESTful que funcionan. LACNIC''s devuelve un 503 y AfriNIC aparentemente no tiene dicha API. (Todos tienen servicios en línea, sin embargo).

Eso le permitirá obtener la dirección del propietario registrado de la IP, pero no la ubicación de su cliente, debe obtenerla de ellos y también debe solicitarla. Además, los proxies son la menor de tus preocupaciones al validar la IP que crees que es el creador.

Las personas no aprecian la noción de que están siendo rastreados, así que, según mi opinión, lo obtienen de su cliente directamente y con su permiso, y esperan mucho para negar la idea.


He hecho muchas pruebas con los servicios de direcciones IP y aquí hay algunas maneras en que lo hago yo mismo. Primero un montón de enlaces a sitios web útiles que utilizo:

https://db-ip.com/db Tiene un servicio gratuito de búsqueda de IP y tiene algunos archivos csv gratuitos que puede descargar. Esto utiliza una clave api gratuita que se adjunta a su correo electrónico. Limita a 2000 consultas por día.

ipinfo.io gratuito de búsqueda de IP sin funciones PHP api-key:

//uses http://ipinfo.io/. function ip_visitor_country($ip){ $ip_data_in = get_web_page("http://ipinfo.io/".$ip."/json"); //add the ip to the url and retrieve the json data $ip_data = json_decode($ip_data_in[''content''],true); //json_decode it for php use //this ip-lookup service returns 404 if the ip is invalid/not found so return false if this is the case. if(empty($ip_data) || $ip_data_in[''httpcode''] == 404){ return false; }else{ return $ip_data; } } function get_web_page($url){ $user_agent = ''Mozilla/5.0 (Windows NT 6.1; rv:8.0) Gecko/20100101 Firefox/8.0''; $options = array( CURLOPT_CUSTOMREQUEST =>"GET", //set request type post or get CURLOPT_POST =>false, //set to GET CURLOPT_USERAGENT => $user_agent, //set user agent CURLOPT_RETURNTRANSFER => true, // return web page CURLOPT_HEADER => false, // don''t return headers CURLOPT_FOLLOWLOCATION => true, // follow redirects CURLOPT_ENCODING => "", // handle all encodings CURLOPT_AUTOREFERER => true, // set referer on redirect CURLOPT_CONNECTTIMEOUT => 120, // timeout on connect CURLOPT_TIMEOUT => 120, // timeout on response CURLOPT_MAXREDIRS => 10, // stop after 10 redirects ); $ch = curl_init( $url ); curl_setopt_array( $ch, $options ); $content = curl_exec( $ch ); $err = curl_errno( $ch ); $errmsg = curl_error( $ch ); $header = curl_getinfo( $ch ); $httpCode = curl_getinfo( $ch, CURLINFO_HTTP_CODE ); curl_close( $ch ); $header[''errno''] = $err; //curl error code $header[''errmsg''] = $errmsg; //curl error message $header[''content''] = $content; //the webpage result (In this case the ip data in json array form) $header[''httpcode''] = $httpCode; //the webpage response code return $header; //return the collected data and response codes }

Al final, obtienes algo como esto:

Array ( [ip] => 1.1.1.1 [hostname] => No Hostname [city] => [country] => AU [loc] => -27.0000,133.0000 [org] => AS15169 Google Inc. )

http://www.geoplugin.com/ Un poco más antiguo, pero este servicio le brinda una gran cantidad de información adicional útil, como la moneda fuera del país, el código del continente, la longitud y más.

http://lite.ip2location.com/database-ip-country-region-city-latitude-longitude Ofrece un grupo de archivos descargables con instrucciones para importarlos a su base de datos. Una vez que tenga uno de estos archivos en su base de datos, puede seleccionar los datos con bastante facilidad.

SELECT * FROM `ip2location_db5` WHERE IP > ip_from AND IP < ip_to

Use la función php ip2long (); para convertir la dirección IP en un valor numérico. Por ejemplo, 1.1.1.1 se convierte en 16843009. Esto le permite buscar los intervalos de IP que le asigna el archivo de la base de datos.

Entonces, para averiguar dónde 1.1.1.1 pertenece a todo lo que hacemos es ejecutar esta consulta:

SELECT * FROM `ip2location_db5` WHERE 16843009 > ip_from AND 16843009 < ip_to;

Esto devuelve estos datos como un ejemplo.

FROM: 16843008 TO: 16843263 Country code: AU Country: Australia Region: Queensland City: Brisbane Latitude: -27.46794 Longitude: 153.02809


La siguiente es una versión modificada de un fragmento que encontré que usa http://ipinfodb.com/ip_locator.php para obtener su información. Tenga en cuenta que también puede solicitar una clave de API con ellos y usar la API directamente para obtener la información que se le proporcione.

Retazo

function detect_location($ip=NULL, $asArray=FALSE) { if (empty($ip)) { if (!empty($_SERVER[''HTTP_CLIENT_IP''])) { $ip = $_SERVER[''HTTP_CLIENT_IP'']; } elseif (!empty($_SERVER[''HTTP_X_FORWARDED_FOR''])) { $ip = $_SERVER[''HTTP_X_FORWARDED_FOR'']; } else { $ip = $_SERVER[''REMOTE_ADDR'']; } } elseif (!is_string($ip) || strlen($ip) < 1 || $ip == ''127.0.0.1'' || $ip == ''localhost'') { $ip = ''8.8.8.8''; } $url = ''http://ipinfodb.com/ip_locator.php?ip='' . urlencode($ip); $i = 0; $content; $curl_info; while (empty($content) && $i < 5) { $ch = curl_init(); $curl_opt = array( CURLOPT_FOLLOWLOCATION => 1, CURLOPT_HEADER => 0, CURLOPT_RETURNTRANSFER => 1, CURLOPT_URL => $url, CURLOPT_TIMEOUT => 1, CURLOPT_REFERER => ''http://'' . $_SERVER[''HTTP_HOST''], ); if (isset($_SERVER[''HTTP_USER_AGENT''])) $curl_opt[CURLOPT_USERAGENT] = $_SERVER[''HTTP_USER_AGENT'']; curl_setopt_array($ch, $curl_opt); $content = curl_exec($ch); if (!is_null($curl_info)) $curl_info = curl_getinfo($ch); curl_close($ch); } $araResp = array(); if (preg_match(''{<li>City : ([^<]*)</li>}i'', $content, $regs)) $araResp[''city''] = trim($regs[1]); if (preg_match(''{<li>State/Province : ([^<]*)</li>}i'', $content, $regs)) $araResp[''state''] = trim($regs[1]); if (preg_match(''{<li>Country : ([^<]*)}i'', $content, $regs)) $araResp[''country''] = trim($regs[1]); if (preg_match(''{<li>Zip or postal code : ([^<]*)</li>}i'', $content, $regs)) $araResp[''zip''] = trim($regs[1]); if (preg_match(''{<li>Latitude : ([^<]*)</li>}i'', $content, $regs)) $araResp[''latitude''] = trim($regs[1]); if (preg_match(''{<li>Longitude : ([^<]*)</li>}i'', $content, $regs)) $araResp[''longitude''] = trim($regs[1]); if (preg_match(''{<li>Timezone : ([^<]*)</li>}i'', $content, $regs)) $araResp[''timezone''] = trim($regs[1]); if (preg_match(''{<li>Hostname : ([^<]*)</li>}i'', $content, $regs)) $araResp[''hostname''] = trim($regs[1]); $strResp = ($araResp[''city''] != '''' && $araResp[''state''] != '''') ? ($araResp[''city''] . '', '' . $araResp[''state'']) : ''UNKNOWN''; return $asArray ? $araResp : $strResp; }

Usar

detect_location(); // returns "CITY, STATE" based on user IP detect_location(''xxx.xxx.xxx.xxx''); // returns "CITY, STATE" based on IP you provide detect_location(NULL, TRUE); // based on user IP // returns array(8) { ["city"] => "CITY", ["state"] => "STATE", ["country"] => "US", ["zip"] => "xxxxx", ["latitude"] => "xx.xxxxxx", ["longitude"] => "-xx.xxxxxx", ["timezone"] => "-07:00", ["hostname"] => "xx-xx-xx-xx.host.name.net" } detect_location(''xxx.xxx.xxx.xxx'', TRUE); // based on IP you provide // returns array(8) { ["city"] => "CITY", ["state"] => "STATE", ["country"] => "US", ["zip"] => "xxxxx", ["latitude"] => "xx.xxxxxx", ["longitude"] => "-xx.xxxxxx", ["timezone"] => "-07:00", ["hostname"] => "xx-xx-xx-xx.host.name.net" }


Mire la API de hostip.info, proporciona mucha información.
Ejemplo en PHP:

$data = file_get_contents("http://api.hostip.info/country.php?ip=12.215.42.19"); //$data contains: "US" $data = file_get_contents("http://api.hostip.info/?ip=12.215.42.19"); //$data contains: XML with country, lat, long, city, etc...

Si confías en hostip.info, parece ser una API muy útil.


Necesita utilizar un servicio externo ... como http://www.hostip.info/ si busca "geo-ip" en google, puede obtener más resultados.

La API de Host-IP está basada en HTTP, por lo que puede usarla en PHP o JavaScript según sus necesidades.


Ok, muchachos, gracias por sus sugerencias; Si bien tengo 6k + de IP, algunos servicios no responderán mis solicitudes debido a algunas limitaciones; Entonces, podrías usarlos todos en modo de repliegue;

Si tenemos un archivo fuente con el siguiente formato:

user_id_1 ip_1 user_id_2 ip_2 user_id_3 ip_1

de lo que podría usar este comando de expansión simple (PoC) para Yii:

class GeoIPCommand extends CConsoleCommand { public function actionIndex($filename = null) { //http://freegeoip.net/json/{$ip} //10k requests per hour //http://ipinfo.io/{$ip}/json //1k per day //http://ip-api.com/json/{$ip}?fields=country,city,regionName,status //150 per minute echo "start".PHP_EOL; $handle = fopen($filename, "r"); $destination = ''./good_locations.txt''; $bad = ''./failed_locations.txt''; $badIP = []; $goodIP = []; $destHandle = fopen($destination, ''a+''); $badHandle = fopen($bad, ''a+''); if ($handle) { while (($line = fgets($handle)) !== false) { $result = preg_match(''#(/d+)/s+(/d+/./d+/./d+/./d+)#'', $line, $id_ip); if(!$result) continue; $id = $id_ip[1]; $ip = $id_ip[2]; $ok = false; if(isset($badIP[$ip])) { fputs($badHandle, sprintf(''%u %s''. PHP_EOL, $id, $ip)); continue; } if(isset($goodIP[$ip])) { fputs($destHandle, sprintf(''"id":"%u","ip":"%s","from":"%s";''. PHP_EOL, $id, $ip, $goodIP[$ip])); echo sprintf(''"id":"%s","ip":"%s","from":"%s";''. PHP_EOL, $id, $ip, $goodIP[$ip]); continue; } $query = @json_decode(file_get_contents(''http://freegeoip.net/json/''.$ip)); $city = property_exists($query, ''region_name'')? $query->region_name : ''''; $city .= property_exists($query, ''city'') && $query->city && ($query->city != $city) ? '', '' . $query->city : ''''; if($city) { fputs($destHandle, sprintf(''"id":"%u","ip":"%s","from":"%s";''. PHP_EOL, $id, $ip, $city)); echo sprintf(''"id":"%s","ip":"%s","from":"%s";''. PHP_EOL, $id, $ip, $city); $ok = true; } if(!$ok) { $query = @json_decode(file_get_contents(''http://ip-api.com/json/''. $ip.''?fields=country,city,regionName,status'')); if($query && $query->status == ''success'') { $city = property_exists($query, ''regionName'')? $query->regionName : ''''; $city .= property_exists($query, ''city'') && $query->city ? '','' . $query->city : ''''; if($city) { fputs($destHandle, sprintf(''"id":"%u","ip":"%s","from":"%s";''. PHP_EOL, $id, $ip, $city)); echo sprintf(''"id":"%s","ip":"%s","from":"%s";''. PHP_EOL, $id, $ip, $city); $ok = true; } } } if(!$ok) { $badIP[$ip] = false; fputs($badHandle, sprintf(''%u %s''. PHP_EOL, $id, $ip)); echo sprintf(''"id":"%s","ip":"%s","from":"%s";''. PHP_EOL, $id, $ip, ''Unknown''); } if($ok) { $goodIP[$ip] = $city; } } fclose($handle); fclose($badHandle); fclose($destHandle); }else{ echo ''Can/'t open file'' . PHP_EOL; return; } return; } }

Este es un tipo de código de mierda, pero funciona. uso:

./yiic geoip index --filename="./source_id_ip_list.txt"

Siéntete libre de usarlo, modificarlo y hacerlo mejor)


PHP tiene una extensión para eso.

Desde PHP.net:

La extensión GeoIP le permite encontrar la ubicación de una dirección IP. Ciudad, estado, país, longitud, latitud y otra información como todos, como el ISP y el tipo de conexión se pueden obtener con la ayuda de GeoIP.

Por ejemplo:

$record = geoip_record_by_name($ip); echo $record[''city''];


Pensé que publicaría ya que nadie parece haber dado información sobre esta API en particular, pero devuelve exactamente lo que estoy buscando y puede obtener que regrese en múltiples formatos, json, xml and csv .

$location = file_get_contents(''http://freegeoip.net/json/''.$_SERVER[''REMOTE_ADDR'']); print_r($location);

Esto te dará todas las cosas que podrías desear:

{ "ip": "77.99.179.98", "country_code": "GB", "country_name": "United Kingdom", "region_code": "H9", "region_name": "London, City of", "city": "London", "zipcode": "", "latitude": 51.5142, "longitude": -0.0931, "metro_code": "", "areacode": "" }


Puede descargar una base de datos GeoIP gratuita y buscar localmente la dirección IP, o puede usar un servicio externo y realizar una búsqueda remota. Esta es la opción más simple, ya que no requiere configuración, pero sí introduce latencia adicional.

Un servicio de un tercero que podría usar es el mío, ipinfo.io . Proporcionan nombre de host, geolocalización, propietario de la red e información adicional, por ejemplo:

$ curl ipinfo.io/8.8.8.8 { "ip": "8.8.8.8", "hostname": "google-public-dns-a.google.com", "loc": "37.385999999999996,-122.0838", "org": "AS15169 Google Inc.", "city": "Mountain View", "region": "CA", "country": "US", "phone": 650 }

Aquí hay un ejemplo de PHP:

$ip = $_SERVER[''REMOTE_ADDR'']; $details = json_decode(file_get_contents("http://ipinfo.io/{$ip}/json")); echo $details->city; // -> "Mountain View"

También puede usarlo desde el lado del cliente. Aquí hay un ejemplo simple de jQuery:

$.get("https://ipinfo.io/json", function (response) { $("#ip").html("IP: " + response.ip); $("#address").html("Location: " + response.city + ", " + response.region); $("#details").html(JSON.stringify(response, null, 4)); }, "jsonp");

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> <h3>Client side IP geolocation using <a href="http://ipinfo.io">ipinfo.io</a></h3> <hr/> <div id="ip"></div> <div id="address"></div> <hr/>Full response: <pre id="details"></pre>


Si está buscando una base de datos actualizada / precisa, le recomiendo que use esta porque here estaba mostrando mi ubicación exacta que no estaba incluida en muchos otros servicios cuando estaba realizando la prueba.
(Mi ciudad era Rasht y mi país era Iran con esta dirección IP: 2.187.21.235 cuando estaba probando).

Recomiendo utilizar la base de datos en lugar de los métodos API, ya que se procesará mucho más rápido a nivel local.


Si necesita obtener la ubicación desde una dirección IP, puede usar un servicio de geo IP confiable, puede obtener más detalles here . Es compatible con IPv6.

Como una bonificación, permite comprobar si la dirección IP es un nodo tor, un proxy público o un spammer.

Puede usar javascript o php como a continuación.

Código Javascript:

$(document).ready(function () { $(''#btnGetIpDetail'').click(function () { if ($(''#txtIP'').val() == '''') { alert(''IP address is reqired''); return false; } $.getJSON("http://ip-api.io/json/" + $(''#txtIP'').val(), function (result) { alert(''City Name: '' + result.city) console.log(result); }); }); });

Código de Php:

$result = json_decode(file_get_contents(''http://ip-api.io/json/64.30.228.118'')); var_dump($result);

Salida:

{ "ip": "64.30.228.118", "country_code": "US", "country_name": "United States", "region_code": "FL", "region_name": "Florida", "city": "Fort Lauderdale", "zip_code": "33309", "time_zone": "America/New_York", "latitude": 26.1882, "longitude": -80.1711, "metro_code": 528, "suspicious_factors": { "is_proxy": false, "is_tor_node": false, "is_spam": false, "is_suspicious": false }


También puede usar el servicio "smart-ip":

$.getJSON("http://smart-ip.net/geoip-json?callback=?", function (data) { alert(data.countryName); alert(data.city); } );


Un ejemplo de JavaScript puro, que utiliza los servicios de https://geoip-db.com Proporcionan una solución de devolución de llamada JSON y JSONP.

¡No se requiere jQuery!

<!DOCTYPE html> <html> <head> <title>Geo City Locator by geoip-db.com</title> </head> <body> <div>Country: <span id="country"></span></div> <div>State: <span id="state"></span></div> <div>City: <span id="city"></span></div> <div>Postal: <span id="postal"></span></div> <div>Latitude: <span id="latitude"></span></div> <div>Longitude: <span id="longitude"></span></div> <div>IP address: <span id="ipv4"></span></div> </body> <script> var country = document.getElementById(''country''); var state = document.getElementById(''state''); var city = document.getElementById(''city''); var postal = document.getElementById(''postal''); var latitude = document.getElementById(''latitude''); var longitude = document.getElementById(''longitude''); var ip = document.getElementById(''ipv4''); function callback(data) { country.innerHTML = data.country_name; state.innerHTML = data.state; city.innerHTML = data.city; postal.innerHTML = data.postal; latitude.innerHTML = data.latitude; longitude.innerHTML = data.longitude; ip.innerHTML = data.IPv4; } var script = document.createElement(''script''); script.type = ''text/javascript''; script.src = ''https://geoip-db.com/json/geoip.php?jsonp=callback''; var h = document.getElementsByTagName(''script'')[0]; h.parentNode.insertBefore(script, h); </script> </html>


Usando Google APIS:

<script type="text/javascript" src="http://www.google.com/jsapi"></script> <script> contry_code = google.loader.ClientLocation.address.country_code city = google.loader.ClientLocation.address.city region = google.loader.ClientLocation.address.region </script>


Creé un contenedor para ipinfo.io . Puedes instalarlo usando el compositor.

Puedes usarlo de esta manera:

$ipInfo = new DavidePastore/Ipinfo/Ipinfo(); //Get all the properties $host = $ipInfo->getFullIpDetails("8.8.8.8"); //Read all the properties $city = $host->getCity(); $country = $host->getCountry(); $hostname = $host->getHostname(); $ip = $host->getIp(); $loc = $host->getLoc(); $org = $host->getOrg(); $phone = $host->getPhone(); $region = $host->getRegion();


Ipdata.co le brinda la geolocalización, organización, moneda, zona horaria, código de llamada, bandera y datos de estado del nodo de salida Tor desde cualquier dirección IPv4 o IPv6.

También es extremadamente escalable y rápido con 10 puntos finales alrededor del mundo, cada uno capaz de manejar llamadas> 800M diariamente.

En php

php > $ip = ''8.8.8.8''; php > $details = json_decode(file_get_contents("https://api.ipdata.co/{$ip}")); php > echo $details->region; California php > echo $details->city; Mountain View php > echo $details->country_name; United States php > echo $details->latitude; 37.751

Aquí hay un ejemplo del lado del cliente que muestra cómo obtendría el país, la región y la ciudad;

$.get("https://api.ipdata.co", function (response) { $("#response").html(JSON.stringify(response, null, 4)); $("#country").html(''Country: '' + response.country_name); $("#region").html(''Region '' + response.region); $("#city").html(''City'' + response.city); }, "jsonp");

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <div id="country"></div> <div id="region"></div> <div id="city"></div> <pre id="response"></pre>

Renuncia;

Construí el servicio.

Para ver ejemplos en varios idiomas, consulte los Docs


Ejecuto el servicio en IPLocate.io , que puede enganchar de forma gratuita con una simple llamada:

<?php $res = file_get_contents(''https://www.iplocate.io/api/lookup/8.8.8.8''); $res = json_decode($res); echo $res->country; // United States echo $res->continent; // North America echo $res->latitude; // 37.751 echo $res->longitude; // -97.822 var_dump($res);

El objeto $res contendrá sus campos de geolocalización como country , city , etc.

Consulte los documentos para obtener más información.


Voy a hacer la misma respuesta que hice here ya que el servicio también está disponible para PHP:

Me gusta la GeoLite City gratuita de Maxmind, que funciona para la mayoría de las aplicaciones y desde la cual puede actualizar a una versión de pago si no es lo suficientemente precisa. Hay una API PHP incluida, así como para otros idiomas. Y si está ejecutando Lighttpd como un servidor web, incluso puede usar un module para obtener la información en la variable SERVER para cada visitante, si eso es lo que necesita.

Debo añadir que también hay un país libre de Geolite (que sería más rápido si no necesitas identificar la ciudad desde la que está la IP) y Geolite ASN (si quieres saber a quién pertenece el IP) y que finalmente todos estos son descargables en su propio servidor, se actualizan todos los meses y son muy rápidos de buscar con las API provistas, ya que indican "miles de búsquedas por segundo".