Geolocalização em Codeigniter

Como localizar um visitante desde o servidor por meio de sua IP, através de PHP realizado com o framework PHP Codeigniter.

Por Heisler Palma- Tradução CRV


Publicado em: 03/1/13
Valorize este artigo:
A Geolocalização por IP é a determinação de sua posição geográfica por meio do dispositivo que você utilize para a conexão com a Internet.

Devido à classe de IP atribuídas por áreas e provedores no mundo, podemos determinar dado o IP de um dispositivo, sua localização, em alguns casos aproximada e em outros casos muito específica.

A geolocalização pode- nos ajudar a mostrar conteúdos segundo as zonas geográficas. Por exemplo, tanto em projetos pequenos quanto em grandes, se podemos saber a partir de onde nos visitam, podemos mostrar publicidade enfocada à zona, mudar o idioma do conteúdo, ou simplesmente, criar estatísticas de nossas visitas para tomar decisões sobre o futuro target a que se enfocaria nossa web.

Neste caso, vamos usar as ferramentas que nos proporciona uma empresa dedicada a soluções deste tipo como www.maxmind.com

A empresa oferece gratuitamente bibliotecas e atualizações das bases de dados com classes IP. Podemos começar indo diretamente à página de download.

Baixamos o arquivo php-1.11.tar.gz (ou a versão que corresponda quando você ler este artigo) e começamos a removê-lo para uma pasta temporária.

Em nosso diretório de aplicação de Codeigniter /application, criamos uma pasta com o nome "timezone" e procedemos a copiar os arquivos da pasta temporária.

  • geoipcity.inc
  • geoip.inc
  • geoipregionvars.php
Posteriormente, baixamos o arquivo GeoLiteCity.dat.gz na página geolite.maxmind.com/download/geoip/database

Nota: Este último é a base de dados que se mantém atualizada com as categorias de IP.

Descomprimimos o arquivo no diretório de aplicação de Codeigniter /application/timezone.

Neste momento, deveria haver os seguintes arquivos na tal pasta:

  • geoLiteCity.dat
  • geoipcity.inc
  • geoip.inc
  • geoipregionvars.php

Scripts PHP para geolocalizar com a IP em Codeigniter

Uma vez tenhamos tudo isto pronto, já estamos em condições de começar a programar para usar este sistema de geolocalização baseada em PHP, com programação no servidor, através da análise da IP do visitante.

1) Criamos nosso arquivo de biblioteca (diretório application/libraries)

Será um arquivo que podemos chamar de timezone.php, com o seguinte conteúdo:

<?php if (!defined('BASEPATH')) exit('No direct script access allowed');
class Timezone
{

var $gmt_timezone = 'Europe/London';
var $timezones = array(
'-12' => 'UM12',
'-11' => 'UM11',
'-10' => 'UM10',
'-9' => 'UM9',
'-8' => 'UM8',
'-7' => 'UM7',
'-6' => 'UM6',
'-5' => 'UM5',
'-4' => 'UM4',
'-3.5' => 'UM25',
'-3' => 'UM3',
'-2' => 'UM2',
'-1' => 'UM1',
'0' => 'UTC',
'1' => 'UP1',
'2' => 'UP2',
'3.5' => 'UP25',
'3' => 'UP3',
'4.5' => 'UP35',
'4' => 'UP4',
'4.5' => 'UP45',
'5' => 'UP5',
'6' => 'UP6',
'7' => 'UP7',
'8' => 'UP8',
'9.5' => 'UP85',
'9' => 'UP9',
'10' => 'UP10',
'11' => 'UP11',
'12' => 'UP11',
);

function __construct()
{
   $this->ci =& get_instance();
   include_once(APPPATH."timezone/geoipcity.inc");
   include_once(APPPATH."timezone/geoipregionvars.php");
}

function get_country_code_by_ip($ip)
{
   $gi = geoip_open(APPPATH."timezone/GeoLiteCityIp6.dat",GEOIP_STANDARD);
   $record = geoip_record_by_addr($gi,$ip);
   geoip_close($gi);

   return $record->country_name;
}

function get_country_code_by_city($ip)
{
   $gi = geoip_open(APPPATH."timezone/GeoLiteCityIp6.dat",GEOIP_STANDARD);
   $record = geoip_record_by_addr($gi,$ip);
   geoip_close($gi);

   return $record->city;
}

function get_region_by_ip($ip)
{
   $gi = geoip_open(APPPATH."timezone/GeoLiteCity.dat",GEOIP_STANDARD);
   $record = geoip_record_by_addr($gi,$ip);
   geoip_close($gi);

   return $record->region;
}

}

2) Controlador para usar a biblioteca anterior

Agora criaremos o controlador a ser usado, neste caso "welcome", de nossa pasta de controladores ( / application/controllers)

Com o seguinte e básico conteúdo:

<?php if (!defined('BASEPATH')) exit('No direct script access allowed');
class Welcome extends CI_Controller {

function __construct()
{
   parent::__construct();
   $this->load->library('timezone');
}

function index(){
   echo "A ip é ".$this->input->ip_address()."<br />";
   if ($this->input->ip_address()<>'127.0.0.1'){
      echo 'País: <br />';
      echo $this->timezone->get_country_code_by_ip($this->input->ip_address());
      echo '<br />Região:<br />';
      echo $this->timezone->get_region_by_ip($this->input->ip_address());
      echo '<br />Cidade: <br />';
      echo $this->timezone->get_country_code_by_city($this->input->ip_address());
      echo '<br />';
   }else{
      echo "O exemplo não funciona em com ip local" ;
   }
}

}
?>

No link seguinte, você poderá baixar um exemplo funcionando.

Nota: Para entender melhor tudo isto, recomendamos ler o Manual de Codeigniter de CriarWeb.com, que nos ajudará com a correta configuração de nosso site.

Algumas notas adicionais para poder seguir estes exemplos:

Já que nosso endereço local é 127.0.0.0 e não tem nenhum sentido averiguá-la neste caso, o exemplo atual não correrá em testes com servidores locais http://localhost/

É importante assinalar que o GeoLiteCity.dat atualmente é de 11MB, assim que não seria um costume saudável chamar as funções de nossa Biblioteca ('timezone') em todos os nossos controladores (já que cada chamada é uma abertura a esse arquivo, com o consequente consumo de memória). O mais conveniente seria colocá-lo em algum controlador ao qual saibamos que o visitante acessará e depois armazená-lo em uma variável de sessão, ou salvá-lo em uma base de dados para nossas estatísticas.

De qualquer modo, para fazê-lo funcionar em nosso controlador escolhido, devemos adicionar a declaração no parent:

$this->load->library('timezone');

E a chamada em nossa function get_country_code_by_ip retornará o país destino:

$Chamada=$this->timezone->get_country_code_by_ip($this->input->ip_address());

De uma maneira similar, também teremos disponíveis as funções get_country_code_by_city(), que retornará a cidade, ou get_region_by_ip() que retornará a região.

Espero que vocês tenham podido tirar o máximo proveito para determinar de que parte do mundo é visitada a página de vocês.






Usuários :    login / registro

Manuais relacionados
Categorias relacionadas
O autor

Home | Sobre nós | Copyright | Anuncie | Entrar em contato