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