En voici un que j'utilise. S'il n'obtient pas de variable GET, il utilise l'adresse distante de l'utilisateur.
<?php
if(!empty($_GET['ip'])){
if(preg_match('!^([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(\.([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])){3}$!',$_GET['ip'])){
$ip_address=$_GET['ip'];
} else {
print ("invalid ip address");
}
} else {
$ip_address=$_SERVER['REMOTE_ADDR'];
}
$test = file_get_contents('http://www.geoplugin.net/php.gp?ip='.$ip_address);
$test = unserialize($test);
print "<html><pre>";
print_r ($test);
print "</pre></html>";
?>