Tutorial: Cómo hacer un simple geolocalizador para detectar países y ciudades en PHP

Alan98 Seguir

Beta
Social Media
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Desde
12 Dic 2012
Mensajes
118
Hola usuarios de Forobeta.

Tenía ganas de hacer algún aporte a esta comunidad que me ha dado mucho, y como es el único lugar por el que ando (por suerte), es exclusiva acá en forobeta porque no la he publicado en ningún lugar más :)

PHP:
<?php

/*
 *
 * Script de geolocalización
 * @author Alan98 (http://forobeta.com/member.php?u=35459)
 *
 */

// Primero obtenemos la IP real del visitante
$realip = (!empty($_SERVER['HTTP_CF_CONNECTING_IP']) ? $_SERVER['HTTP_CF_CONNECTING_IP'] : (!empty($_SERVER['HTTP_X_FORWARDED_FOR']) ? $_SERVER['HTTP_X_FORWARDED_FOR'] : $_SERVER['REMOTE_ADDR']));
// Comprobamos si está disponible cURL, que es más rápido que file_get_contents
if(function_exists('curl_init')){
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.9) Gecko/2008052906 Firefox/3.0');
    curl_setopt($ch, CURLOPT_URL, 'http://api.codehelper.io/ips/?php&ip='.$realip);
    curl_setopt($ch, CURLOPT_TIMEOUT, 60);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    $data = curl_exec($ch);
    curl_close($ch);
} else {
    $data = file_get_contents('http://api.codehelper.io/ips/?php&ip='.$realip);
}

// Parseamos la respuesta JSON
$data = json_decode($data, 1);
// Imprimimos la información al cliente
echo 'Tu pa&iacute;s: <b>',$data['CountryName'],'</b>, tu c&oacute;digo de pa&iacute;s: <b>',$data['Country'],'</b>, tu regi&oacute;n: <b>',$data['RegionName'],'</b>, tu ciudad: <b>',$data['CityName'],'</b>.';

Ahí tienen, si quieren utilizarla para redireccionarla por ejemplo a alguna URL del país de su web comprobando que el país esté disponible en el array pueden hacer así:

PHP:
// Países disponibles
$ava = array('AR', 'MX', 'ES');
// En caso de estar entre el array, realizamos redirección
if(in_array($data['Country'], $ava)) die(header('Location: http://tuweb.com/'.strtolower($data['Country'])));

Ahí comprobará si el país desde el que el cliente ingresa está dentro del array (en este caso Argentina, México y España) será redireccionado a una carpeta de su web que tenga ese código de país en minúsculas. Si tienen alguna duda déjenme un comentario o un MP y los ayudaré a aclararla. Si quieren utilizarla sólo para la información sin imprimir la información, sólo borran el echo y hacen un include así:
PHP:
require 'geoip.php';
y accederán a los datos con la misma variable


Demo: http://clanpirata.com.ar/geoip.php

Descarga: https://www.mediafire.com/?03u58dt2n0v1e0x



Un saludo :encouragement:
 
U

Usuario eliminado 24959

Aportazo, muchas gracias :star2:
Cada vez que veo aportes así de buenos me recuerdo que también debo aprender a programar.
 

Roberth Zuñiga

Gamma
Redactor
Verificación en dos pasos activada
Verificado por Whatsapp
Desde
23 Nov 2011
Mensajes
323
Gracias buen aporte, solo es cuestión de creatividad para que de resultado de imagen mostrando la bandera.
 

Alan98

Beta
Social Media
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Desde
12 Dic 2012
Mensajes
118
Gracias buen aporte, solo es cuestión de creatividad para que de resultado de imagen mostrando la bandera.

Eso es fácil, sólo sería cuestión de cambiar el echo por este:
PHP:
echo 'Tu pa&iacute;s: <b>',$data['CountryName'],'</b> <img src="http://geoiptool.com/flags/',strtolower($data['Country']),'.gif" />, tu c&oacute;digo de pa&iacute;s: <b>',$data['Country'],'</b>, tu regi&oacute;n: <b>',$data['RegionName'],'</b>, tu ciudad: <b>',$data['CityName'],'</b>.';
 

XYZ

Dseda
Social Media
Verificado
Verificación en dos pasos activada
Verificado por Whatsapp
Verificado por Binance
Desde
3 Sep 2011
Mensajes
1.186
Gracias por el aporte, andaba en busca de esto :)
 

hugomiguel2002

Préstamo
Social Media
No recomendado
Verificación en dos pasos activada
Verificado por Whatsapp
Desde
26 Oct 2012
Mensajes
1.543
Si funciona pero me sale otra ciudad, igual buen aporte estaba necesitando esto para una redireccion por pais! Muchas Gracias!!! A favoritos!
 

Steeep

Delta
Social Media
Desde
19 Nov 2012
Mensajes
593
Donde puedo ver la lista de los códigos de países? Necesito hacer un condicional y no sé si la lista de los códigos de países será la misma.

- AR = Argentina?
- MX = México?
- UY = Uruguay?
- CL = Chile?
- PA = Panamá?
- EC = Ecuador?

Podrías confirmarme si esta bien?

Aún así voy a intentar, ya que me haz salvado de una muy grande jeje :encouragement:
 

Alan98

Beta
Social Media
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Desde
12 Dic 2012
Mensajes
118
Donde puedo ver la lista de los códigos de países? Necesito hacer un condicional y no sé si la lista de los códigos de países será la misma.

- AR = Argentina?
- MX = México?
- UY = Uruguay?
- CL = Chile?
- PA = Panamá?
- EC = Ecuador?

Podrías confirmarme si esta bien?

Aún así voy a intentar, ya que me haz salvado de una muy grande jeje :encouragement:
Son correctos :encouragement:
Códigos ISO países
Desde ahí podés ver el listado de códigos ISO de países
Sólo pones
PHP:
if($data['Country'] === 'AR') { *do* }
y ya está, o sino utilizando un array para poner varios países como expliqué en el tema :)
 

Torrecilla

1
Ni
Programador
Verificación en dos pasos activada
Suscripción a IA
Desde
2 Feb 2013
Mensajes
3.867
Donde puedo ver la lista de los códigos de países? Necesito hacer un condicional y no sé si la lista de los códigos de países será la misma.

- AR = Argentina?
- MX = México?
- UY = Uruguay?
- CL = Chile?
- PA = Panamá?
- EC = Ecuador?

Podrías confirmarme si esta bien?

Aún así voy a intentar, ya que me haz salvado de una muy grande jeje :encouragement:

Conoces Google?
Let me google that for you

----------------------------
Muy bueno el tutorial, pero igual me sale una ciudad diferente.
 

Dirtyboss

Préstamo
Zeta
Desde
29 Sep 2011
Mensajes
1.659
Conoces Google?
Let me google that for you

----------------------------
Muy bueno el tutorial, pero igual me sale una ciudad diferente.

No sé mucho sobre el tema, pero es por la ip que tienes.

Por ejemplo, yo estoy en tijuana, pero en mi lap tengo la ip o la puerta de enlace de Mexicali, y en el demo que deja el compañero, dice que mi localización es MEXICALI, siendo que estoy en tijuana.

De hecho, muy buen aporte.

Gracias
 

Alan98

Beta
Social Media
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Desde
12 Dic 2012
Mensajes
118
Lo de las ciudades nunca es 100% correcto, varía según el proveedor de servicios, creo que ni el geolocalizador del mismo google detecta la ciudad correctamente en todos los proveedores :confused:
 

Marco Grados

No recomendado
Verificado
Verificación en dos pasos activada
Verificado por Whatsapp
¡Ha verificado su Paypal!
Desde
20 Abr 2013
Mensajes
6.821
Por favor, ten en cuenta 📝 que si deseas hacer un trato 🤝 con este usuario, está baneado 🔒.
Se agradece el aporte, muy bueno :encouragement:
 

shadowhck

Lambda
Programador
Verificado por Whatsapp
Desde
18 Ago 2009
Mensajes
2.772
Es necesario depender del sitio codehelper.io?


Recuerdo hace tiempo que existía una base de datos en la que se comparaban las IP, y obtenías estos datos sin tener que recurrir a peticiones de sitios con dudosa reputación (Con su respectivo Overhead).
 

Isidro

Gamma
Programador
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Desde
18 Jun 2012
Mensajes
157
Es necesario depender del sitio codehelper.io?

Recuerdo hace tiempo que existía una base de datos en la que se comparaban las IP, y obtenías estos datos sin tener que recurrir a peticiones de sitios con dudosa reputación (Con su respectivo Overhead).
En septiembre publiqué una respuesta donde también se utilizaba ese sitio para lo mismo, y por lo visto aún sigue funcionando. Hay un enlace en la respuesta donde se puede ver las diferentes formas de utilizar la API (JavaScript, PHP, etc). Es algo sencillo y fácil de hacer, pero cada cual lo puede hacer a su manera.

Yo lo he utilizado más para las zonas horarias, pues aunque la ciudad pueda variar dependiendo del proveedor de Internet, la zona horaria suele ser la correcta al ser la misma en varias ciudades.

Por mi parte agradecer a Alan98 que lo haya compartido :)
 
Última edición:

Radick

Mi
Redactor
Verificación en dos pasos activada
Desde
29 Abr 2010
Mensajes
3.034
Igual es un buen aporte amigo :encouragement:
Lo de las ciudades nunca es 100% correcto, varía según el proveedor de servicios, creo que ni el geolocalizador del mismo google detecta la ciudad correctamente en todos los proveedores :confused:
 
Arriba