Ver Mensaje Individual
  #5 (permalink)  
Antiguo 11/06/2009, 14:30
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
Respuesta: visualizar info dependiendo de la ip del cliente

No puedes saberlo con IP solamente. Es como te dice pateketrueke. Mira tienes que usar este servicio

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)

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. Te voy a dar el que yo uso pero el unico problema es que tienes que cambiar dos cosas del archivo que bajes de ip-to-country.webhosting.info

1. quitar todas las comillas. Yo te sugiero que uses un programa que es muy bueno para editar se llama Notepad++
2. 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.

Ok este es el codigo que yo uso

Código PHP:
<?php
/**
 * This class generates the country name and its flag from its IP address
 *
 *
 * @author Rochak Chauhan
 */
class CountryFromIP {

    private 
$CountryIPDatabase 'CountryIPDatabase.txt';
    private 
$ip '';

    
/**
     * Function to validate IP ( please modify it according to your needs)
     *
     * @param $ip - string
     *
     * @return boolean
     */
    
public function ValdateIP($ip) {
        
$ipArray explode(',',$ip);

        if(
count($ipArray) != 4) {
            echo 
"<font color='red' size='3'> <b>ERROR: </b> Invalid IP</font>";
            return 
false;
        }
        else {
            return 
true;
        }
    }

    
/**
     * Function to return Country name from the IPDatabase
     *
     * @param $ip string
     * 
     * @return string - name of the country, false otherwise
     */
    
public function GetCountryName($ip) {
        
$this->ip $ip;
        
$ip sprintf("%u"ip2long($ip));

        
$csvArray file($this->CountryIPDatabase);

        for(
$i=0$i<count($csvArray); $i++) {
            
$arrayOfLine explode(','$csvArray[$i]);
            if(
$ip >= $arrayOfLine[0] && $ip <= $arrayOfLine[1] ) {
                return 
$countryName $arrayOfLine[4];
            }
        }
        return 
false;
    }

    
/**
     *  Function to return local path to Country's flag
     *
     * @param $ip - string
     *
     * @return string - local path to flag image
     */
    
public function ReturnFlagPath() {

        if(
$countryName trim(ucwords(strtolower($this->GetCountryName($this->ip))) )) {
                        
$countryName str_replace(' ','%20',$countryName);
            return 
"flag/$countryName.gif";
        }
        else {
            return 
false;
        }
    }

}

$ip $_SERVER["REMOTE_ADDR"];

$object = new CountryFromIP();

$countryName =  $object->GetCountryName($ip);
$flagPath =  $object->ReturnFlagPath();
/*
echo "<BR> <B>Country: </B>".$countryName;
echo "<BR> <B>Flag: </B> <img src=".$flagPath." border='0'>";
*/
?>
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://www.geocities.com/rochakchauhan/flag.zip

Me dejas saber

Última edición por abimaelrc; 11/06/2009 a las 14:50