Detectar país en PHP

Vamos a ver una forma de detectar, mediante PHP, el país de origen de un usuario conectado a nuestras páginas web. De esta forma, podemos tomar decisiones a la hora de servir el contenido de una página web en función del origen (país) desde el que se está viendo dicha página.

Lo primero de todo es obtener la IP del visitante:

$_SERVER["HTTP_CLIENT_IP"]!=""? $ip=$_SERVER["HTTP_CLIENT_IP"]:$ip=$_SERVER["REMOTE_ADDR"];

Para seguidamente obtener el código del país al que pertenece dicha IP:

function getCountry($ip_address){
// código por Marc Palau
$url = "http://ip-to-country.webhosting.info/node/view/36";
$inici = "src=/flag/?type=2&cc2=";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST,"POST");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, "ip_address=$ip_address");
ob_start();
curl_exec($ch);
curl_close($ch);
$cache = ob_get_contents();
ob_end_clean();
$resto = strstr($cache,$inici);
$pais = substr($resto,strlen($inici),2);
return $pais;
}

Ahora, cuando queramos saber el país de procedencia de un visitante, para que la página web tome un comportamiento u otro en función ello, sólo tenemos que llamar a esta función:

$codigo_pais = strtolower(getCountry($ip));

… que nos devolverá el código del país en cuestión. Este código de país está en formato ISO 3166-1-alpha-2 code, que describe 2 letras para cada país. Puedes ver la tabla de correspondencia código-país aquí.