El rincón de JMACOE

PHP Geotarget IP

Aquí una nueva función para obtener la localización geográfica de un IP.

Se puede usar por ejemplo para determinar en idioma presentar nuestras paginas web.

También para frenar a los spammers de ciertos países, sé que parece muy radical pero después de utilizar IP’s (de listas banneadas), captchas, akismet, nombres de dominio baneados, etc, no se me ocurre que otra cosa por hacer.

Forma de usar:

$geoip=geoIP('81.60.189.183'); //Usando un IP existente
$geoip=geoIP(); //puedes usar el IP del cliente

print_r($geoip);

echo $geoip['country'];
echo $geoip['countryAb'];
echo $geoip['city'];

 if ($geoip['country']=='india')  die('País no permitido'); //Para bannear un país

El codigo fuente:

function get_tag($tag,$xml){
	preg_match_all('/<'.$tag.'>(.*)<\/'.$tag.'>$/imU',$xml,$match);
	return $match[1];
}

function valid_ip($ip){
	return ( ! preg_match( "/^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$/", $ip)) ? FALSE : TRUE;
}

function geoIP($stringIp=-1){

    if (!valid_ip($stringIp)) $stringIp = $_SERVER['REMOTE_ADDR'];

    if ($_COOKIE['geoip']){
        $geoip=unserialize($_COOKIE['geoip']);
        if ($geoip['ip']==$stringIp) return $geoip; //Solo devuelve si el IP es el mismo sino continua
    }

	$url='http://api.hostip.info/?ip='.$stringIp; //Haciendo una llamada al Hostip mediante la API:
	$xml = file_get_contents($url);//echo $url;

	$city = get_tag('gml:name',$xml);
	$city = strtolower ($city[1]);

	$countryName = get_tag('countryName',$xml);
	$countryName = strtolower ($countryName[0]);

	$countryAbbrev = get_tag('countryAbbrev',$xml);
	$countryAbbrev = strtolower ($countryAbbrev[0]);

	$geoip['ip']=$stringIp;
	$geoip['city']=$city;
	$geoip['country']=$countryName;
	$geoip['countryAb']=$countryAbbrev;

	setcookie('geoip',serialize($geoip), time()+60*60*24*14); // Poniendo una cookie con la data que expira en 2 semanas:
	return $geoip;
}

Comparte y diviertete: