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; }
Entradas relacionadas