Cómo reemplazar PHP GeoIP con MaxMindDB

Según el sitio o la aplicación, buscar información geográfica relacionada con una dirección IP puede ser una acción bastante común. Cuando se realiza la geolocalización de IP en PHP, generalmente se usa la extensión PHP GeoIP para facilitar la recuperación de esta información. Desafortunadamente, este complemento en particular ya no se admite activamente y no se ha actualizado en varios años.

Con la extensión PHP de geolocalización de IP en desuso, los nuevos proyectos deberían comenzar a usar las opciones de reemplazo que ahora proporciona MaxMind. Sin embargo, a diferencia del GeoIP original, que se envió como una extensión nativa de PHP, las nuevas soluciones se proporcionan como paquetes de biblioteca basados en PHP.

Requisitos

  • Es necesaria una familiaridad básica con la codificación PHP para utilizar los paquetes de Composer.
  • El acceso a la línea de comandos a través de SSH puede ser necesario para seguir este tutorial.
  • Composer, Curl, funzip deben estar disponibles en el servidor.

Paso #1: ¿Cuáles son mis opciones ahora?

Como se mencionó anteriormente, las nuevas opciones ya no se proporcionan como extensiones PHP nativas, sino que vienen como paquetes PHP basados en Composer. Las nuevas opciones proporcionadas por MaxMind son:GeoIP2-phpohDB-Lector-php.

Ambas opciones brindan la capacidad de geolocalización de IP con sutiles diferencias; en cierto sentido, el paquete GeoIP2-php es una adición construida sobre el paquete DB-Reader-php, ofrece las mismas funciones que DB-Reader-php con la adición de acceso API.

Además, es importante tener en cuenta que solo se proporciona la opción DB-Reader sin ningún costo adicional. Con las nuevas opciones, MaxMind ahora cobra una tarifa de suscripción para acceder a sus API.

En general, para la mayoría de los casos de uso, el paquete DB-Reader-php proporcionará las funciones necesarias, por lo que este artículo se centrará en esta opción.

Paso #2: ¡Comience con MaxMind DB-Reader!

Como se menciona en los requisitos, se requerirá Composer para seguir estos pasos. Si no tiene Composer listo para usar, aprenda a configurar y usar Composer en su servidor.

Para adquirir el paquete DB-Reader necesario, querrá comenzar cambiando el directorio para estar en la carpeta raíz de su dominio (para esto example asumiremos que esto es `public_html`), luego ejecutará el siguiente comando.

[public_html] $ composer require maxmind-db/reader:~1.0

Ejecutar este comando descargará los archivos del paquete en la carpeta actual, como se describe en nuestra serie Composer. Esto creará una carpeta de proveedores si es la primera vez que usa Composer en este sitio/proyecto.

A continuación, necesitará los archivos reales de la base de datos de MaxMind que contienen los datos de geolocalización. Para obtener estos archivos, ejecutará los siguientes comandos.

[public_html] $ funzip <(curl -L https://geolite.maxmind.com/download/geoip/database/GeoLite2-Country.mmdb.gz) > ./GeoLite2-Country.mmdb
[public_html] $ funzip <(curl -L https://geolite.maxmind.com/download/geoip/database/GeoLite2-City.mmdb.gz) > ./GeoLite2-City.mmdb

Con los comandos anteriores ejecutados, ahora debería tener los componentes necesarios para hacer Geolocalización usando el complemento DB-Reader. Todo lo que queda es implementarlo en su código.

Paso #3: Buscando tu primera IP

Para asegurarse de que las funciones de geolocalización funcionan correctamente, es posible que desee realizar una prueba rápida. Primero confirmaremos que tiene todas las piezas correctas ejecutando el siguiente comando.

$ ls -lah

Debería ver una estructura de archivos similar a esta.

-rw-rw-r-- 1 someuser someuser 63 Aug 11 17:03 composer.json
-rw-rw-r-- 1 someuser someuser 2.4K Aug 11 17:03 composer.lock
-rw-rw-r-- 1 someuser someuser 73M Aug 11 17:04 GeoLite2-City.mmdb
-rw-rw-r-- 1 someuser someuser 19M Aug 11 17:04 GeoLite2-Country.mmdb
drwxrwxr-x 4 someuser someuser 4.0K Aug 11 17:03 vendor/

Ahora que está listo para hacer una prueba rápida, puede hacerlo creando un archivo index.php con el siguiente contenido.

<?php
require_once 'vendor/autoload.php';

use MaxMindDbReader;
$ipAddress = '8.8.8.8';
$databaseFile = './GeoLite2-City.mmdb';

$reader = new Reader($databaseFile);

print_r($reader->get($ipAddress));

$reader->close();

Este archivo de índice simplemente hará una prueba rápida para garantizar que el archivo de la base de datos se esté cargando, se pueda verificar una IP y se proporcionen los resultados. La prueba buscará la información geográfica relacionada con el servidor DNS de Google en 8.8.8.8.

Resultados de ubicación geográfica para el servidor DNS 8.8.8.8 de Google a través de MaxMind

Después de haber seguido las instrucciones correctamente, debería ver un resultado similar a la imagen de arriba al cargar la página de índice de prueba.

Actualizaciones del boletín

Ingrese su dirección de correo electrónico a continuación para suscribirse a nuestro boletín