Geolocalización es la palabra que designa la acción de informar la posición y localización geográfica de un determinado (en el caso que hablamos) visitante de una web.
En el siguiente manual voy a escribir una guía de pasos para dotar de soporte de geolocalización (de forma totalmente gratuita) un servidor web, y así utilizar esta información de manera sencilla y eficiente.
Así podremos guardar información acerca de la localización de los usuarios que han comentado, que han subido una foto, e incluso combinarlo con mod_rewrite y realizar redirecciones dependiendo de su pais, etc.
Para preparar el sistema de geolocalización nos vamos a basar en un servidor Apache (de la rama 2.x) bajo un sistema operativo Linux, en nuestro caso un CentOS. También necesitaremos soporte PHP y herramientas de compilación, que por lo general ya vienen instaladas en todo servidor Linux.
En este manual vamos a utilizar la base de datos de MaxMind, que incorpora GeoLite City una base de información de paises y ciudades, que además provee varios métodos de uso:
En este manual vamos a ir un poco más allá y compilaremos el código para utilizarlo como módulo de Apache, y ganar en rapidez y eficiencia, teniendo a nuestra disposición unas variables GEOIP_COUNTRY_CODE y GEOIP_COUNTRY_NAME con la información disponibles para utilizar en nuestro código PHP directamente.
¡Ojo! Antes de compilar el módulo de Apache, necesitaremos esta segunda API (para C) instalada en nuestro sistema. Para ello, escribimos el mantra de compilación ./configure, make y finalmente, realizamos la instalación con un make install.
Esto habrá generado unas cabeceras en nuestra carpeta /usr/local/include, entre otros que nos permitirán compilar el módulo de Apache sin problemas.
Asi pues, salimos de la carpeta actual cd .., volviendo a la carpeta de las fuentes del mod_geoip2. Aquí escribiremos apxs -i -a -L/usr/local/lib -I/usr/local/include -lGeoIP -c mod_geoip.c. La utilidad apxs (APache eXtenSion tool) se encargará de compilar el modulo e instalarlo en su ubicación correspondiente (generalmente /usr/lib/httpd/modules/). Incluso, dará los permisos adecuados e insertará la linea en el fichero de configuración de Apache.
No obstante, puedes comprobar que, ha sido insertada, en el fichero /etc/httpd/httpd.conf o similar:
LoadModule geoip_module modules/mod_geoip.so
En el anterior fichero de configuración, podemos añadir una linea Include mod_geoip.conf para crear un fichero mod_geoip.conf donde ubicar la información básica para hacer funcionar el módulo:
# mod_geoip2 configuration file
GeoIPEnable On
GeoIPDBFile /usr/local/share/GeoIP/GeoLiteCity.dat
GeoIPEnableUTF8 On
GeoIPOutput Env
#GeoIPOutput Notes
#GeoIPOutput All
Remarcar que esta configuración básica activa el módulo con nuestra base binaria GeoLiteCity.dat (~16MB) que tendremos que colocar en la ruta /usr/local/share/GeoIP. En la directiva GeoIPDBFile se pueden establecer varias bases con distinto nombre, para utilizar según necesidades de memoria, situación, etc.
Por último, existen dos formas de proporcionar información geolocalizable desde Apache, a través de variables de entorno (Environment) activando GeoIPOutput a Env o a través del comando apache_note de PHP. La primera es más cómoda, así que activamos sólo esta, y desactivamos las demás para ahorro de recursos, aunque si se desea se pueden activar las dos con All.
Finalmente, tenemos el sistema de geolocalización instalado y nos proporciona información adicional desde PHP, mediante el array asociativo SERVER, por ejemplo $_SERVER['GEOIP_CITY']:
| Variable | Valor |
|---|---|
| GEOIP_CONTINENT_CODE | EU |
| GEOIP_COUNTRY_CODE | ES |
| GEOIP_COUNTRY_NAME | Spain |
| GEOIP_REGION | 29 |
| GEOIP_CITY | Madrid |
| GEOIP_DMA_CODE | 0 |
| GEOIP_AREA_CODE | 0 |
| GEOIP_LATITUDE | 40.400002 |
| GEOIP_LONGITUDE | -3.683300 |
Como extra, en ip-to-country existen varios comprimidos de diferente tamaño, con un conjunto de banderas, ordenadas por su código de pais, que pueden servir para colocar imagen en nuestro código PHP.
Si conoces alguno, mencionalo en los comentarios para añadirlo:
6 consultas efectuadas / Página generada en 0.027 segundos
Programado íntegramente por José Román (Manz) en XHTML y CSS estándar.
Sindicado bajo Feed RSS. Contenido bajo licencia Creative Commons
Estadísticas de visitas · Términos y condiciones · Contacto · Publicidad · Preguntas frecuentes (FAQ)