visitante para obtener nombre gethostname funcion equipo con como cliente alguien php geolocation ip-address geoip ip-geolocation

para - php obtener ip local



Obtener el país de la dirección IP con PHP (17)

Idealmente, estoy tratando de armar un script PHP que pueda consultar desde cualquier navegador web y devuelve el país de la dirección IP que accedió al script PHP.

¿Es esto posible o hay una mejor solución?


Aquí hay otra API gratuita para solicitudes de geolocalización: http://geoip.nekudo.com

Las respuestas están en formato JSON. Además, el código fuente API está disponible en github en caso de que necesite configurar su propia API.



Encontré esta publicación en el blog muy útil. Me salvó el día. http://www.techsirius.com/2014/05/simple-geo-tracking-system.html

Básicamente, debe instalar la tabla de la base de datos de IP y luego hacer una consulta de MySQL para la dirección IP de la ubicación.

<?php include ''config.php''; mysql_connect(DB_HOST, DB_USER, DB_PASSWORD) OR die(mysql_error()); mysql_select_db(DB_NAME) OR die(mysql_error()); $ip = $_SERVER[''REMOTE_ADDR'']; $long = sprintf(''%u'', ip2long($ip)); $sql = "SELECT * FROM `geo_ips` WHERE ''$long'' BETWEEN `ip_start` AND `ip_end`"; $result = mysql_query($sql) OR die(mysql_error()); $ip_detail = mysql_fetch_assoc($result); if($ip_detail){ echo $ip_detail[''country'']."'', ''".$ip_detail[''state'']."'', ''".$ip_detail[''city'']; } else{ //Something wrong with IP }


Hay API gratuitas y fáciles de usar que pueden usar, como las siguientes:

Cuál se ve más confiable depende de usted :)

De lo contrario, hay scripts que se basan en bases de datos locales en su servidor. Sin embargo, los datos de la base de datos deben actualizarse regularmente. Mira este:

HTH!

Editar: Y, por supuesto, dependiendo de su proyecto, es posible que desee ver las características de Ubicación HTML5 . Todavía no puedes usarlos en Internet Explorer (IE9 lo admitirá, aún queda mucho camino por recorrer), pero en caso de que tu audiencia esté principalmente en dispositivos móviles o usando Safari / Firefox, definitivamente vale la pena mirarlo.

Una vez que tenga las coordenadas, puede revertir las geocodificaciones a un código de país. De nuevo, hay API como esta:

Actualización, abril de 2013
Hoy recomendaría usar Geocoder , una biblioteca PHP que hace que sea muy fácil geocodificar direcciones IP así como también datos de direcciones postales.

*** Actualización, septiembre de 2016
Como la política de privacidad de Google ha cambiado, no puede usar la API de geolocalización de HTML5 si su servidor no tiene un certificado HTPPS o si el usuario no le permite verificar su ubicación. Entonces ahora puede usar la IP del usuario y registrarse en PHP u obtener un certificado HTTPS.


Hay varias API web que harán esto por usted. Aquí hay un ejemplo usando mi servicio, http://ipinfo.io :

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

Las API web son una buena solución rápida y fácil, pero si necesita realizar muchas búsquedas, tener una base de datos IP -> en su propia máquina es una mejor solución. MaxMind ofrece una base de datos gratuita que puede usar con varias bibliotecas PHP, incluido GeoIP .


Instala y utiliza http://php.net/manual/en/book.geoip.php si puedes. En debian lenny:

sudo wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz sudo gunzip GeoLiteCity.dat.gz sudo mkdir -v /usr/share/GeoIP sudo mv -v GeoLiteCity.dat /usr/share/GeoIP/GeoIPCity.dat sudo apt-get install php5-geoip # or sudo apt-get install php-geoip for PHP7

y luego pruébalo en PHP:

$ip = $_SERVER[''REMOTE_ADDR'']; $country = geoip_country_name_by_name($ip); echo ''The current user is located in: '' . $country;

devoluciones:

The current user is located in: Cameroon



Puede descargar tablas ip de MaxMind:

http://www.maxmind.com/app/geolite

Importe el archivo CSV a su base de datos (asegúrese de crear un índice para ip_long_from + ip_long_to). Entonces puedes simplemente hacer:

$iplong = ip2long($_SERVER[''REMOTE_ADDR'']); // should use mysqli with prepared statements etc, but just an example mysql_query(" SELECT country FROM ip_table WHERE $iplong BETWEEN ip_long_from AND ip_long_to LIMIT 1 ");


Puede obtener el país de la dirección IP con esta API de ubicación

Código

echo file_get_contents(''https://ipapi.co/8.8.8.8/country/'');

Respuesta

US

Aquí hay un fiddle . La respuesta es text cuando consulta un campo específico, por ejemplo, country aquí. No necesita decodificación, simplemente conéctelo a su código.

PD: si desea todos los campos, por ejemplo, https://ipapi.co/8.8.8.8/json/ , la respuesta es JSON .


Puede probar los servicios de https://www.geoip-db.com Proporcionan una solución de devolución de llamada JSON o JSONP.

<?php $json = file_get_contents("https://www.geoip-db.com/json"); $data = json_decode($json); print $data->country_code . "<br>"; print $data->country_name . "<br>"; print $data->state . "<br>"; print $data->city . "<br>"; print $data->postal . "<br>"; print $data->latitude . "<br>"; print $data->longitude . "<br>"; print $data->IPv4 . "<br>"; ?>


Puede usar https://ip-api.io/ para obtener el nombre del país, el nombre de la ciudad, la latitud y la longitud. Es compatible con IPv6.

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

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 }


Si necesita tener una base de datos buena y actualizada, para tener más rendimiento y no solicitar servicios externos desde su sitio web, here hay un buen lugar para descargar bases de datos actualizadas y precisas.

Lo recomiendo porque, en mi experiencia, funcionaba de manera excelente, incluso con la ubicación de ciudad y país para mi IP, que la mayoría de las otras bases de datos / apis no incluían / ​​informaban mi ubicación, excepto http://ipinfodb.com/ip_location_api.php que me dirigió a esta base de datos.
(Mi ubicación IP era de "Rasht" City en "Irán" cuando estaba probando y el IP era: 2.187.21.235 igual a 45815275 )

Por lo tanto, recomiendo utilizar estos servicios si no está seguro de qué servicio es más preciso:

Base de datos: here

Servicio API: http://ipinfodb.com/ip_location_api.php


Utilice el widget www.feedsalive.com para obtener también información sobre el país y la última página.


Veo que hay muchas respuestas, pero ninguna de ellas menciona https://freegeoip.net/

Se te permiten hasta 15,000 queries per hour . Creo que eso es suficiente en la mayoría de los casos. De lo contrario, debería pensar en usar bases de datos locales de MaxMind GeoIP .

Freegeoip es de código abierto y puede encontrar fuentes en github , implementarlo localmente y deshacerse de los límites de la consulta.

Además, el servicio proporciona latitud / longitud / zona horaria y otras cosas útiles.


Ipdata.co proporciona una API escalable para hacer esto. ¡Con 10 endpoints globales cada uno capaz de manejar solicitudes de> 800M diariamente!

También le proporciona la organización, la moneda, la zona horaria, el código de llamada, el indicador y los datos del estado del nodo de salida Tor desde cualquier dirección IPv4 o IPv6.

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->location; 37.405991,-122.078514

Renuncia

Creé este servicio.


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.


$country_code = trim(file_get_contents("http://ipinfo.io/{$ip_address}/country"))

obtendrá el código de país.