¡Buenas!,
Vamos a hacer un script muy sencillo para detectar el país desde donde nos visita un usuario, usando una API externa para mostrarle, por ejemplo, los precios de tu producto en su divisa... ¡y todo en menos de 10 lineas de código!:
<?php
// Cogemos la IP del usuario del array que nos pasa el servidor
$user_ip = $_SERVER['REMOTE_ADDR'];
// Iniciamos el handler de CURL y le pasamos la URL de la API externa
$ch = curl_init("http://api.hostip.info/country.php?ip=$user_ip");
// Con este comando le pedimos a CURL que, en vez de mostrar
// el resultado en pantalla, nos lo devuelva como una variable
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// Y simplemente hacemos la petición HTTP.
$country_code = curl_exec($ch);
// Y para muestra, un botón, vamos a probar que funciona bien:
echo "Este adorable servidor ha detectado que tu código de país es... $country_code";
?>
Como norma general, siempre que usemos una API externa a nuestro servidor, tenemos que minimizar la cantidad de peticiones que le hagamos... por una parte lo necesitamos por la rapidez, por otra parte, nos podríamos encontrar con problemas de que esa API nos limite a cierta cantidad de peticiones por hora/día/etc, como Twitter o, en el peor de los casos, que nos banee la IP del servidor.
Para evitar este problema, en este caso vamos a guardarnos este código del país en una variable de sesión y así, antes de pedirle nada a la API, comprobaremos si ya lo teníamos:
<?php
// Antes de nada, iniciamos la sesión
session_start();
// Comprobamos si ya tenemos la variable de sesión guardada, o
// más concretamente, le pedimos a nuestro script que sólo
// ejecute este bloque de código si NO está asignada.
if(!$_SESSION['country_code']) {
// Cogemos la IP del usuario del array que nos pasa el servidor
$user_ip = $_SERVER['REMOTE_ADDR'];
// Iniciamos el handler de CURL y le pasamos la URL de la API externa
$ch = curl_init("http://api.hostip.info/country.php?ip=$user_ip");
// Con este comando le pedimos a CURL que, en vez de mostrar
// el resultado en pantalla, nos lo devuelva como una variable
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// Y simplemente hacemos la petición HTTP.
$country_code = curl_exec($ch);
// Guardamos la variable en $_SESSION
$_SESSION['country_code'] = $country_code;
}
?>
¡Profit! =)
Si necesitáis más información de la visita como, de forma inquietantemente aproximada, la ciudad y la geolocalización (para integrarlo en un mapa), podéis echarle un ojo a la documentación que tienen.
PD: ¿Qué categoría pensáis que le va mejor para esta clase de hilos?, al no haber una específica de "Tutoriales", tiene cabida en "Recursos" y "Código"... de momento la he puesto como "Recursos" porque no es una duda acerca del código, ¿qué opináis?.