post icon

Detectar el País de Origen del usuario con PHP

Ricardo, uno de nuestros lectores nos preguntaba como puede detectar de que zona o país provienen sus lectores y necesita hacerlo con PHP. Tenía en mente una manera de desarrollarlo algo más largo y menos práctico que la que veremos hoy. Me puse a investigar rápidamente y encotré un muy buen ejemplo escrito por Francisco en su Blog, como soy partidario de no reinventar la rueda y su código me pareció más sencillo que el mío, así que veremos el suyo 🙂

A explicar un poco lo que hace el  código, como los países tienen asignados rangos de IP que se van distribuyendo a las ISP entonces es relativamente sencillo este proceso. Lo primero que hacemos es obtener el la IP del visitante y luego utilizamos uno de los servicios de WebHosting.info, quien nos devolverá las 2 letras asignadas a las URL por paises, ejemplo:

  • Paraguay: py
  • Chile: cl
  • España: es
  • Mexico: mx
  • Rusia: ru
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
   //Obtener IP:
   $_SERVER["HTTP_CLIENT_IP"]!=""?$ip=$_SERVER["HTTP_CLIENT_IP"]:
   $ip=$_SERVER["REMOTE_ADDR"];
 
   //Función de obtención de IP (basado en la web de webhosting.info)
   function getCountry($ip_address){
      //By Marc Palau (http://www.nbsp.es)
      $url = "http://ip-to-country.webhosting.info/node/view/36";
 
      $inici = "src=/flag/?type=2&cc2=";
 
      $ch = curl_init();
      curl_setopt($ch, CURLOPT_URL, $url);
      curl_setopt($ch, CURLOPT_POST,"POST");
      curl_setopt($ch, CURLOPT_POST, 1);
      curl_setopt($ch, CURLOPT_POSTFIELDS, "ip_address=$ip_address"); 
 
      ob_start();
 
      curl_exec($ch);
      curl_close($ch);
      $cache = ob_get_contents();
      ob_end_clean();
 
      $resto = strstr($cache,$inici);
      $pais = substr($resto,strlen($inici),2);
 
      return $pais;
   }
//obtención de código de país:
$pais = strtolower(getCountry($ip));

Lo que correrá por nuestra cuenta es almacenar  en algún lugar (base de datos, fichero de texto o algun otro lugar) la lista de países con sus zonas para luego comparar y reaccionar contra él. Si queremos crear zonas agregamos un nivel más de relación de los países por zonas como nos guste o convenga organizar los países.

Si quieren mostrar al usuario su origen, con una bandera pueden crear la estructura y tener almacenadas las imágenes para cruzar las referencias y dejar todo enchulado 😛

Lo he probado aquí en devtroce y funciona el código, espero sepan darle buen uso y éxito con sus sitios 😀

Comentarios desde Facebook:

Sin Comentarios aun, puedes tú ser el primero en comentar!

Deja tu Comentario

Responder