Ver Mensaje Individual
  #1 (permalink)  
Antiguo 11/06/2009, 15:06
Avatar de abimaelrc
abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años
Puntos: 1517
[APORTE] ver de que Pais es la persona que me visita

Espero que les sea útil. Este es el codigo que yo uso para ver de que Pais proviene la persona que esta accediendo a mi página web.

Primero tienen que bajar el texto donde se encuentra toda la informacion de los paises

http://ip-to-country.webhosting.info/node/view/6

vas a darle un click al link que dice
Download the latest IP-to-Country Database (Last updated on June 03 2009)
Aquí esta el link directo para bajar el archivo http://ip-to-country.webhosting.info...ountry.csv.zip

Ese archivo lo actualizan una vez cada mes aproximadamente. A veces más tiempo.

Luego usas una funcion que te permite comparar el codigo con el ip de la persona. Aqui les indico el que yo uso, pero el unico problema es que tienes que cambiar 1 cosa del archivo que bajes de ip-to-country.webhosting.info

1. algunos lugares salen al final con
, U.S.
y debes quitarle la coma a esa parte, lo que tienes que hacer es un replace para que salga solamente
U.S.
Nota: Puede que en la ultima actualización que este en el momento hayan quitado esta parte del texto.

Ok este es el codigo que yo uso

Código PHP:
Ver original
  1. <?php
  2. /**
  3.  * This class generates the country name and its flag from its IP address
  4.  *
  5.  *
  6.  * @author Rochak Chauhan
  7.  */
  8. class CountryFromIP {
  9.  
  10.     private $CountryIPDatabase = 'CountryIPDatabase.txt';
  11.     private $ip = '';
  12.  
  13.     /**
  14.      * Function to validate IP ( please modify it according to your needs)
  15.      *
  16.      * @param $ip - string
  17.      *
  18.      * @return boolean
  19.      */
  20.     public function ValdateIP($ip) {
  21.         $ipArray = explode(',',$ip);
  22.  
  23.         if(count($ipArray) != 4) {
  24.             echo "<font color='red' size='3'> <b>ERROR: </b> Invalid IP</font>";
  25.             return false;
  26.         }
  27.         else {
  28.             return true;
  29.         }
  30.     }
  31.  
  32.     /**
  33.      * Function to return Country name from the IPDatabase
  34.      *
  35.      * @param $ip string
  36.      *
  37.      * @return string - name of the country, false otherwise
  38.      */
  39.     public function GetCountryName($ip) {
  40.         $this->ip = $ip;
  41.         $ip = sprintf("%u", ip2long($ip));
  42.  
  43.         $csvArray = file($this->CountryIPDatabase);
  44.  
  45.         for($i=0; $i<count($csvArray); $i++){
  46.             $setCsv = str_replace("\"", "", $csvArray[$i]);
  47.             $arrayOfLine = explode(',', $setCsv);
  48.             if($ip >= $arrayOfLine[0] && $ip <= $arrayOfLine[1] ) {
  49.                 return $countryName = $arrayOfLine[4];
  50.             }
  51.         }
  52.         return false;
  53.     }
  54.  
  55.     /**
  56.      *  Function to return local path to Country's flag
  57.      *
  58.      * @param $ip - string
  59.      *
  60.      * @return string - local path to flag image
  61.      */
  62.     public function ReturnFlagPath() {
  63.  
  64.         if($countryName = trim(ucwords(strtolower($this->GetCountryName($this->ip))) )) {
  65.             $countryName = str_replace(' ','%20',$countryName);
  66.             return "flag/$countryName.gif";
  67.         }
  68.         else {
  69.             return false;
  70.         }
  71.     }
  72.  
  73. }
  74.  
  75. $ip = $_SERVER["REMOTE_ADDR"];
  76.  
  77. $object = new CountryFromIP();
  78.  
  79. $countryName =  $object->GetCountryName($ip);
  80. $flagPath =  $object->ReturnFlagPath();

Aqui vas a indicar donde se encuentra el archivo que bajaste yo le cambie el nombre a esto
private $CountryIPDatabase = 'CountryIPDatabase.txt';
pero puedes dejarle el nombre como sale originalmente, y con la extension .csv.

Lo unico que tienes que hacer para saber de que pais viene es escribir
echo $countryName;

Para que te funcione $flagPath tendrias que bajar todas las banderas y aqui estan
http://rapidshare.com/files/311065106/flag.zip

Última edición por abimaelrc; 23/11/2009 a las 07:51