Implementando Geolocalização de IP usando Free IP2Location LITE e PHP
Visite qualquer site da Web e provavelmente você encontrará alguma forma de localização sendo usada. O mais comum é a exibição de anúncios locais para você, mesmo que o site seja estrangeiro. Usando o endereço IP do visitante da web, o operador do site pode direcionar anúncios e conteúdos relevantes ou alterar o idioma do site com base no seu país de geolocalização.
Exploraremos como implementar esse recurso de geolocalização em seu próprio site usando PHP. A Parte 1 trata da criação do banco de dados e da tabela, bem como da importação dos dados. A Parte 2 mostrará como usar o PHP para consultar o banco de dados e recuperar os resultados.
Parte 1: Importando os dados de geolocalização
Vamos supor que seu site esteja executando um servidor da web Apache com PHP no back-end. Assumiremos que você está usando MySQL, pois o PHP geralmente opera com MySQL.
O primeiro passo é baixar o arquivo de banco de dados DB11 LITE de https://lite.ip2location.com/database/ip-country-region-city-latitude-longitude-zipcode-timezone que é gratuito após a inscrição.
Depois de fazer download do arquivo compactado, extraia o arquivo de dados IP2LOCATION-LITE-DB11.CSV para uma pasta chamada /root/ip2location_data
(este é apenas um exemplo de nome de pasta).
Em seu MySQL, execute o seguinte para criar o banco de dados e a tabela que armazenaremos os dados DB11.
CREATE DATABASE ip2location;
USE ip2location;
CREATE TABLE `ip2location_db11`(
`ip_from` INT(10) UNSIGNED,
`ip_to` INT(10) UNSIGNED,
`country_code` CHAR(2),
`country_name` VARCHAR(64),
`region_name` VARCHAR(128),
`city_name` VARCHAR(128),
`latitude` DOUBLE,
`longitude` DOUBLE,
`zip_code` VARCHAR(30),
`time_zone` VARCHAR(8),
INDEX `idx_ip_to` (`ip_to`)) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
Agora execute o seguinte no MySQL para importar os dados.
LOAD DATA LOCAL
INFILE '/root/ip2location_data/IP2LOCATION-LITE-DB11.CSV'
INTO TABLE
`ip2location_db11`
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY 'rn'
IGNORE 0 LINES;
Parte 2: Consultando os dados de geolocalização em sua página da web PHP
Agora, criaremos a página da web PHP para consultar o banco de dados e gerar os dados de geolocalização para o visitante da página.
Crie uma página chamada test.php
e cole o seguinte código nela.
<?php
$dbname = 'ip2location'; // database name
$dbhost = 'localhost'; // database server name
$dbuser = 'root'; // database user login
$dbpass = '12345'; // database user password
?>
<!DOCTYPE html>
<head>
<title>Test page</title>
</head>
<body>
<?php
try {
$pdo = new PDO('mysql:host='. $dbhost. ';dbname='. $dbname. ';charset=utf8', $dbuser, $dbpass);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$ip = $_SERVER['REMOTE_ADDR']; // web visitor's IP address
$st = $pdo->prepare('select * from `ip2location_db11` where inet_aton(:ip) <= ip_to limit 1');
$st->bindParam(':ip', $ip, PDO::PARAM_STR);
$st->execute();
$data = $st->fetchAll(PDO::FETCH_ASSOC);
if ($st->rowCount() > 0) {
echo 'country_code: '. $data[0]['country_code']. "<br />n";
echo 'country_name: '. $data[0]['country_name']. "<br />n";
echo 'region_name: '. $data[0]['region_name']. "<br />n";
echo 'city_name: '. $data[0]['city_name']. "<br />n";
echo 'latitude: '. $data[0]['latitude']. "<br />n";
echo 'longitude: '. $data[0]['longitude']. "<br />n";
echo 'zip_code: '. $data[0]['zip_code']. "<br />n";
echo 'time_zone: '. $data[0]['time_zone']. "<br />n";
}
else {
echo 'No data found.<br />'. "n";
}
}
catch(PDOException $e) {
echo 'An error has occurred.<br />'. "n";
}
?>
</body>
</html>
Agora abra essa página no seu navegador. Você deve ver todos os dados de geolocalização do seu próprio endereço IP. Depois de ver todos os campos de geolocalização retornados pelos dados IP2Location DB11 LITE, você pode usá-los em muitos cenários. Você pode filtrar o tráfego, bloquear ou redirecionar usuários com base em suas localizações.
Se você tiver mais perguntas sobre a implementação, pode encontrar mais tutoriais no Blog do IP2Location.