Geolocalización por IP en PHP y país: Completo
Obtener geolocalización con país por dirección IP en PHP
Geolocalización por IP en PHP y país. En este artículo con solo dos archivos PHP vamos a integrar la opción de geo localizar por país a un visitante en internet haciendo uso de la IP.
Los datos de importancia que obtendremos será los parámetros como ser:
- Nombre del país
- Código de país
- Dirección IP
¿Para qué sirve la geolocalización por IP?
Esta técnica tiene varios usos en la web:
- Si tu página web solicita a los clientes que ingresen su país o cualquier dato relacionado con la ubicación
- Por seguridad, algunas páginas web almacenan la dirección IP y país del visitante.
- Para mostrar ofertas, si el usuario pertenece a algún país.
Si solicitamos país de residencia al usuario, es mejor obtenerlo automáticamente mediante el uso de una API de geolocalización.
Hemos utilizado un popular servicio de API de geolocalización para obtener la ubicación de los clientes para mi tienda de productos digitales.
Siempre es bueno reducir el esfuerzo del usuario final de ingresar datos. Debemos hacer que se sientan bien haciendo que el proceso sea perfecto.
Veremos cómo conseguir la geolocalización con nombre de país y código utilizando la dirección IP. Es un proceso de dos pasos donde el paso 1 es obtener la dirección IP y el paso 2 es obtener la geolocalización.
Geolocalización por IP en PHP y país
En este ejemplo se utiliza la herramienta de API de geolocalización IPWhoIs para buscar los datos de ubicación mediante la dirección IP.
{ "ip": "8.8.4.4", "success": true, "type": "IPv4", "continent": "North America", "continent_code": "NA", "country": "United States", "country_code": "US", "country_flag": "https://cdn.ipwhois.io/flags/us.svg", "country_capital": "Washington", "country_phone": "+1", "country_neighbours": "CA,MX,CU", "region": "California", "city": "Mountain View", "latitude": 37.3860517, "longitude": -122.0838511, "asn": "AS15169", "org": "Google LLC", "isp": "Google LLC", "timezone": "America/Los_Angeles", "timezone_name": "Pacific Standard Time", "timezone_dstOffset": 0, "timezone_gmtOffset": -28800, "timezone_gmt": "GMT -8:00", "currency": "US Dollar", "currency_code": "USD", "currency_symbol": "$", "currency_rates": 1, "currency_plural": "US dollars", "completed_requests": 0 }
¿Cómo funciona la Geolocalización por IP en PHP?
Este punto de enlace de API busca cualquier IPV4, IPv6 o cualquier dominio como parámetro junto con la solicitud de geolocalización para leer.
- Este código ejecuta un proceso de 2 pasos para generar los datos de ubicación.
- Crea un servicio PHP con una función para obtener la dirección IP del usuario de la matriz
$_SERVER
. - Luego, utilizará la dirección IP para configurar la opción cURL para leer los datos de geolocalización.
- Esto generará el nombre del país, el código y la IP dada analizando la respuesta JSON de la API.
Diferentes usos de la Geolocalización por IP en PHP
Hay más usos para obtener la geolocalización de los usuarios por dirección IP.
- Brinda precisión y confiabilidad de los datos de ubicación, mientras que el usuario puede ingresar datos incorrectos.
- Proporciona un único punto de entrada para obtener los datos que se utilizarán en muchos lugares, como el convertidor de moneda basado en la ubicación, el cálculo de envío o muchos más.
- Calcular las estadísticas de visitas según la región.
- Ayuda a cambiar el idioma del contenido del sitio web multilingüe localizando a los visitantes.
- Para trazar la ubicación de los usuarios en una capa de mapa de la interfaz de usuario. La API de JavaScript de Google Maps proporciona servicios de geolocalización para mostrar la ubicación de los usuarios y el dispositivo en un mapa.
Estructura de archivo del script
A continuación, mostramos la mínima estructura de archivos y muestra la simplicidad de este ejemplo con un número mínimo de archivos que se requieren para que funcione.
Detalles de los archivos
- El archivo Request.php tiene las funciones principales que ejecutan los dos pasos para obtener datos de IP y geolocalización.
- El archivo index.php llama al servicio para obtener los datos de ubicación y completarlos en la interfaz de usuario.
Obtener y validar la dirección IP actual
Este es el código de la página de inicio que contiene el código HTML para reconocer a los usuarios con los datos de geolocalización actuales.
Importa la clase de servicio de ubicación invoca los métodos para obtener y validar la dirección IP.
Una vez que la IP se valida y devuelve true, solicita los datos de geolocalización. O bien, mostrará el mensaje de error en la interfaz de usuario.
index.php
A continuación, les dejare el contenido de este fichero.
<?php require_once 'lib/Request.php'; $requestModel = new Request(); $ip = $requestModel->getIpAddress(); $isValidIpAddress = $requestModel->isValidIpAddress($ip); ?> <html> <head> <title>Obtener la ubicación geográfica por la dirección IP</title> <link href="assets/css/style.css" type="text/css" rel="stylesheet" /> </head> <body> <div class="txt-heading">Obtener la ubicación geográfica por la dirección IP</div> <?php if ($isValidIpAddress == "") { echo "<div class='error'>Dirección IP invalida: $ip</div>"; } else { $geoLocationData = $requestModel->getLocation($ip); ?> <div id="location"> <div class="geo-location-detail"> <div class="row"> <div class="form-label"> Nombre del país: <?php echo $geoLocationData['country'];?> </div> </div> <div class="row"> <div class="form-label"> Código de país: <?php echo $geoLocationData['country_code'];?> </div> </div> <div class="row"> <div class="form-label"> Dirección IP: <?php echo $geoLocationData['ip'];?> </div> </div> </div> </div> <?php }?> </body> </html>
Preparar la solicitud de API para obtener la geolocalización a través de PHP cURL
La función getIPAddress()
crea una escala if-else-if de la mayoría del escenario para obtener la dirección IP no vacía mediante la variable $_SERVER
.
Una vez que la IP se valida y devuelve true, la función getLocation()
solicita la API ipwhois a través de cURL.
Como resultado, la API devolverá una respuesta JSON. En este ejemplo se decodifica la respuesta JSON y se analizan los datos de geolocalización para obtener los detalles del país.
lib/Request.php
<?php class Request { public function getIpAddress() { $ipAddress = ''; if (! empty($_SERVER['HTTP_CLIENT_IP']) && $this->isValidIpAddress($_SERVER['HTTP_CLIENT_IP'])) { // check for shared ISP IP $ipAddress = $_SERVER['HTTP_CLIENT_IP']; } else if (! empty($_SERVER['HTTP_X_FORWARDED_FOR'])) { // check for IPs passing through proxy servers // check if multiple IP addresses are set and take the first one $ipAddressList = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']); foreach ($ipAddressList as $ip) { if ($this->isValidIpAddress($ip)) { $ipAddress = $ip; break; } } } else if (! empty($_SERVER['HTTP_X_FORWARDED']) && $this->isValidIpAddress($_SERVER['HTTP_X_FORWARDED'])) { $ipAddress = $_SERVER['HTTP_X_FORWARDED']; } else if (! empty($_SERVER['HTTP_X_CLUSTER_CLIENT_IP']) && $this->isValidIpAddress($_SERVER['HTTP_X_CLUSTER_CLIENT_IP'])) { $ipAddress = $_SERVER['HTTP_X_CLUSTER_CLIENT_IP']; } else if (! empty($_SERVER['HTTP_FORWARDED_FOR']) && $this->isValidIpAddress($_SERVER['HTTP_FORWARDED_FOR'])) { $ipAddress = $_SERVER['HTTP_FORWARDED_FOR']; } else if (! empty($_SERVER['HTTP_FORWARDED']) && $this->isValidIpAddress($_SERVER['HTTP_FORWARDED'])) { $ipAddress = $_SERVER['HTTP_FORWARDED']; } else if (! empty($_SERVER['REMOTE_ADDR']) && $this->isValidIpAddress($_SERVER['REMOTE_ADDR'])) { $ipAddress = $_SERVER['REMOTE_ADDR']; } return $ipAddress; } public function isValidIpAddress($ip) { if (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4 | FILTER_FLAG_IPV6 | FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE) === false) { return false; } return true; } public function getLocation($ip) { $ch = curl_init('http://ipwhois.app/json/' . $ip); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $json = curl_exec($ch); curl_close($ch); // Decode JSON response $ipWhoIsResponse = json_decode($json, true); // Country code output, field "country_code" return $ipWhoIsResponse; } }
Salida: Respuesta API – geolocalización con país
Las siguientes imágenes muestran los datos de ubicación con el nombre del país, el código.
Si la dirección IP no es válida, el código devolverá el mensaje de error para reconocer al usuario.
API de geolocalización alternativa
Estas son algunas de las alternativas que proporcionan servicios de API para acceder a los datos de ubicación mediante programación.
- El servicio GeoPlugin permite el acceso desde PHP, ASP, JavaScript y más.
- Biblioteca IPinfo para obtener la ubicación a través de la autenticación basada en tokens.
PHP admite la integración del paquete GeoIP2 de la extensión PECL para obtener los datos de ubicación mediante el uso de funciones predefinidas. El código para obtener el nombre del país de la dirección IP o el nombre de dominio es,
geoip_country_name_by_name ( $hostname );
Conclusión
Existen varias formas para Geolocalizar por IP, algunos manejan Api y estructuras muy complejas. Sin embargo, se programan en diversos lenguajes de programación.
En este artículo, hemos tratado de hacer algo muy sencillo y minimalista para que el ejemplo se pueda entender, y lo más importante que el script funcione correctamente.
Ademas, tambien como opcion se podria almacenar los datos en MySQL, siempre y cuando tengamos una conexion a MySQL.
Espero que esta breve explicación les ayude en sus proyectos web.
Ver Demo Descargar
qué genio!!! gracias!!! maravilloso y muy útil aporte!!!!