GeoLite City informações completas do seu IP – Parte II

Você já viu que utilizando as bibliotecas do GeoLite é possivel localizar o pais de um IP, mas é uma informação limitada, já com o GeoLite City exibe informações mais detalhadas além do Pais como Estado, Cidade, Latitude e Longitude, Código Postal (CEP) e muito mais.
Como esta é uma ferramenta gratuita, algumas informações não estão totalmente completas como por exemplo o CEP e  Código de Área (telefônia). Em meus testes consegui identificar que para os EUA, Canadá e Itália estes dados estão disponíveis, mas para o Brasil (pelo menos para o estado de São Paulo) ainda não.

Este código complementa o mesmo utilizado em GeoLite Country, porém, utiliza um objeto com as caracteristicas de localização.

Faça o download do arquivo dat, copie o geoipcity.inc também, crie o arquivo – geoipregionvars.php – com as variáveis e constantes necessárias como este, certifique-se que o arquivo geoip.inc esteja na sua estrutura de arquivos, que deverá ficar assim:

arquivos-geolitecity

Vamos ao código! O seu arquivo index.php deverá centralizar a obtenção do IP e chamar as funções para decodificar e exibir os dados sobre ele, veja:


<?php

// Includes da API
require("geoipregionvars.php");
require("geoipcity.inc");

// Obtem o IP
$vIP     = $_SERVER['REMOTE_ADDR'];

// Abre o arquivo dat com o banco de dados
$giCity  = geoip_open("GeoLiteCity.dat",GEOIP_STANDARD);

// obtem o registro do
$record  = geoip_record_by_addr($giCity, $vIP);
?>

Até aqui conseguimos identificar o IP e obter as informações sobre de localização que está na variável $record, a seguir esta a camada de visualização dos dados.


<?
// obtem o registro do
$record  = geoip_record_by_addr($giCity, $vIP);
if( !empty($record) ){?>
<table border="0" cellpadding="2" cellspacing="1">
<tr>
<th colspan="2">Informações sobre o IP
<em>"<?= $vIP ?>"</em></th>
</tr>
<tr>
<td width="35%">País</td>
<td width="65%"><?= $record->country_name ?></td>
</tr>
<tr>
<td>Estado</td>
<td>
<?=$GEOIP_REGION_NAME[$record->country_code][$record->region] ?>

</td>
</tr>
<tr>
<td>Cidade</td>
<td><?= $record->city ?></td>
</tr>
<?    if(!empty($record->postal_code)){ ?>
<tr>
<td>CEP</td>
<td><?= $record->postal_code ?></td>
</tr>
<? } ?>
<tr>
<td>Latitude</td>
<td><?= $record->latitude ?></td>
</tr>
<tr>
<td>Longitude</td>
<td><?= $record->longitude ?></td>
</tr>
</table>
<?
}
?>

Have a fun.

4 Comments

  1. victor disse:

    esse codigo esta errado…
    vc precisa colocar <?php ao inves de so <? ou <?=.
    ele nao funciona se vc estiver rodando em um servidor local (localhost)..
    a variavel vIP deve receber o seu ip real para q a funcao funcione corretamente….

  2. Luciano disse:

    Na verdade o código funciona, o comportamento da utilização das tags do PHP varia de como sua instalação está configurada. Porém, não deixa de ser uma boa prática utilizaro comando completo como você disse, isto tudo é uma questão de praticidade.

    []‘s

  3. Elieser Guterres disse:

    O código funcionou perfeitamente comigo.
    Mas alguns numeros de IPs não retornam todos os dados. Retorna somente o país. Existem algum tipo de atualização do arquivo .DAT para retornar esses numeros de IPs?

  4. Luciano disse:

    Elieser Guterres, a versão free da MaxMind não é a mais atualizada, eles cobram caso você queria dados mais atualizados.
    Obrigado pelo comentário.

Leave a Reply