io lo ho appena fatto per il mio ^^
quello che devi fare è usare un servizio di geolocalizzazione ed estrarre la regione
( questi servizi sopratutto se gratuiti non sono mai affidabili al 100% ad esempio se mi connetto tramite il wimax mi risulta abruzzo anziché Lombardia )

cmq io uso un servizio chiamato utrace.de


Codice PHP:
<?Php //trovacomune
 //restituisce una stringa con all'interno il comune di provenienza dell'utente
 //connesso in base al suo ip 
function trovacomune(){ 
//trovo il tuo comune 
error_reporting(0);
 
$myip=$_SERVER['REMOTE_ADDR']; 
if(
$myip!="127.0.0.1"){
 
$dir1="http://xml.utrace.de/?query=";
 
$dir2=$myip
$dir3=$dir1.$dir2
$apifile file($dir3); 

//a questo punto $apifile è la risposta xml del webserver, devo solo trovare nel testo ciò 
// che mi serve e lo faccio con str_replace e trim

$region=$apifile[7]; //la risposa è nella 7ma riga
$region=str_replace("<region>"""$region); $region=str_replace("</region>"""$region);
$region=trim($region); }
else{ 
$region="gazzo veronese"; } 
return 
$region; }
?>
la funzione trovacomune quando chiamata prende il tuo ip, esegue un collegamento al webserver di geolocalizzazione e restituisce la region dal file xml che gli viene passato.
l'if che ho inserito era solo per non avere stupidi errori quando testo il tutto in locale e quindi non posso contattare il web server.

Il web server che ti ho passato è gratuito fino a 100 query al gg poi bisogna prendere la licenza commerciale.
purtroppo la region che fornisce è un comune solitamente quindi ti consiglio di far passare poi il dato in un db che trasforna il comune in una regione ( ne ho costruito uno apposta con i file csv che scarichi dal sito dell'istat ) non è troppo difficile.

PS: il tuo server deve essere abilitato al traffico server vs server
( servizi gratuiti come altervista non lo sono quindi controlla )

spero ti sia utile