Geolocalización por IP
Resuelve direcciones IPv4 e IPv6 a códigos de país ISO 3166-1 alfa-2 mediante una base de datos binaria local MaxMind GeoLite2.
Requiere una base de datos GeoLite2 creada por MaxMind, disponible en https://www.maxmind.com. MaxMind y GeoLite2 son marcas registradas de MaxMind, Inc.
Modelo operativo y almacenamiento
El servicio IPLookup ejecuta consultas binarias en local y sin conexión sobre un archivo MaxMind DB (.mmdb) almacenado en el sistema de archivos del servidor. No se emiten peticiones de red salientes durante la evaluación de expresiones.
- Ubicación de la base de datos: De forma predeterminada, la base de datos se almacena en
wp-content/expressionlab/{hash}-GeoLite2-Country.mmdb, donde{hash}corresponde a un HMAC determinista de 16 caracteres derivado de las claves secretas de la instalación. - Ruta personalizada: Es posible definir la constante
EXPRESSION_LAB_MAXMIND_PATHenwp-config.phppara indicar una ruta alternativa dentro deWP_CONTENT_DIR. El archivo debe tener la extensión.mmdb. - Política de actualización: Las directivas de MaxMind exigen actualizar las bases de datos GeoLite2 dentro de los 30 días posteriores a su publicación.
- Direcciones reservadas y privadas: Las direcciones de loopback (
127.0.0.1,::1), los rangos privados (RFC 1918) y las direcciones de enlace local no contienen asignación geográfica y devuelvennull.
Gestión de la base de datos mediante WP-CLI
La obtención, actualización y mantenimiento de la base de datos se gestionan mediante WP-CLI.
Descarga o actualización de la base de datos
Para descargar o renovar la base de datos local GeoLite2 Country:
wp expressionlab iplookup update --license-key=MAXMIND_LICENSE_KEY
Para evitar pasar la clave de licencia como opción en cada ejecución, basta con definir la constante en wp-config.php:
define( 'EXPRESSION_LAB_MAXMIND_API_KEY', 'maxmind_license_key' );
Con la constante definida, ejecutar:
wp expressionlab iplookup update
Las actualizaciones se omiten si la base de datos se actualizó en las últimas 24 horas. Para eludir esta comprobación, se puede indicar la opción --force:
wp expressionlab iplookup update --force
Inspección del estado de la base de datos
Para consultar el estado actual de la base de datos, la ruta del archivo, el tamaño, la fecha de modificación y la época de compilación (build epoch):
wp expressionlab iplookup status
La salida incluye advertencias si el archivo de la base de datos no se encuentra o si su fecha de compilación supera el plazo de cumplimiento de 30 días.
Eliminación de la base de datos
Para eliminar el archivo de la base de datos local:
wp expressionlab iplookup delete
Para omitir la confirmación interactiva, se puede añadir la opción --yes:
wp expressionlab iplookup delete --yes
Métodos
IPLookup.to_country()
Resuelve una dirección IPv4 o IPv6 a su código de país ISO 3166-1 alfa-2 de dos letras.
IPLookup.to_country(
string:ip
): string|null
Parámetros
ip(string, requerido): Cadena con una dirección IPv4 o IPv6 válida.
Valor devuelto
Devuelve una cadena de dos letras en mayúsculas que representa el código de país ISO 3166-1 alfa-2 (como 'US', 'ES', 'DE'), o null si la dirección IP se encuentra en un rango privado, reservado o sin asignar.
Gestión de errores
- Emite
\InvalidArgumentExceptionsi la cadena de entrada no corresponde a una dirección IPv4 o IPv6 con sintaxis válida. - Emite
\RuntimeExceptionsi el archivo de base de datos GeoLite2 no se encuentra o no se puede leer. Ejecutarwp expressionlab iplookup updatepara instalar la base de datos.
Ejemplos
/* Resolver una dirección IPv4 pública a su código de país */
IPLookup.to_country('8.8.8.8')
/* Resolver una dirección IPv6 pública */
IPLookup.to_country('2001:4860:4860::8888')
/* Las direcciones IP privadas o reservadas devuelven null */
IPLookup.to_country('192.168.1.1')
/* La dirección de loopback local devuelve null */
IPLookup.to_country('127.0.0.1')