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.
Aquí hay un ejemplo usando http://www.geoplugin.net/json.gp
$ip = $_SERVER[''REMOTE_ADDR''];
$details = json_decode(file_get_contents("http://www.geoplugin.net/json.gp?ip={$ip}"));
echo $details;
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:
- http://ipinfodb.com/ip_location_api.php
- http://www.ipgeo.com/api/
- http://ip2.cc/
- http://www.geobytes.com/IpLocator.htm
- https://iplocate.io/
- y muchos otros.
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:
- Ejemplo: http://ws.geonames.org/countryCode?lat=47.03&lng=10.2
- Más API: http://www.geonames.org/export/ws-overview.html
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
Mire las funciones de GeoIP en "Otras extensiones básicas". http://php.net/manual/en/book.geoip.php
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.