Inicio > Programación Web > PHP Geotarget IP

PHP Geotarget IP

viernes, 22 de marzo de 2024 Dejar un comentario Ir a comentarios

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:
  • Print
  • Digg
  • StumbleUpon
  • del.icio.us
  • Facebook
  • Yahoo! Buzz
  • Twitter
  • Google Bookmarks
  • BarraPunto
  • Bitacoras.com
  • BlinkList
  • Blogosphere
  • Live
  • Meneame
  • MSN Reporter
  • MySpace
  • RSS
  • Suggest to Techmeme via Twitter
  • Technorati
  • LinkedIn
  • email
  • FriendFeed
  • PDF
  • Reddit
  • Wikio IT
  • Add to favorites
  • blogmarks
Top Footer