Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Visitante

Redirecionamento por Estado/País (não por latitude/longitude)

Recommended Posts

Visitante

Existe alguma maneira de um site ter uma versão diferente para cada estado do Brasil? Ou seja, para cada estado que acessar, abrir uma página diferente.

Pesquisei e encontrei maneiras de identificar latitude/longitude, o que não resolveria o meu problema ou daria uma trabalho imenso de mapear todas as latitudes/longitudes de cada estado. Além disso, como ficaria nas áreas próximas a fronteiras?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Devido ao ip dinâmico largamento utilizado você não vai encontrar uma maneira realmente eficiente de resolver isto.

Compartilhar este post


Link para o post
Compartilhar em outros sites
Visitante
22 horas atrás, ESerra disse:

Devido ao ip dinâmico largamento utilizado você não vai encontrar uma maneira realmente eficiente de resolver isto.

Já encontrei, e várias. O Ip dinâmico que você fala é apenas na máquina do cliente, pois o servidor da operadora deve possuir IP fixo, por questões legais. Há vários serviços que retornam a Cidade, o Estado e o País onde aconteceu o acesso. Por exemplo:

 

http://pecl.php.net/package/geoip
http://pear.php.net/package/Net_GeoIP/
http://dev.maxmind.com/geoip/

 

O melhor que eu achei foi esse abaixo, pois não precisa de nenhuma API. Apenas utiliza um serviço online que retorna os dados de localização mediante o IP informado.

 

http://api.db-ip.com/addrinfo?api_key=bc2ab711d740d7cfa6fcb0ca8822cb327e38844f&addr=66.249.73.188

 

Você pode gerar uma chave GRATUITA que retorna CIDADE/ESTADO/PAÍS, e também pode COMPRAR outras chaves que retornam consultas mais detalhadas. usando esse endereço:

https://db-ip.com/db/

 

Funciona muito bem e permite milhares de consultas.

Eu preciso de ajuda é pra para montar o SCRIPT DE REDIRECIONAMENTO. Pois esses dados são retornados em modo texto da seguinte forma:

 

{"address":"66.249.73.188","country":"US","stateprov":"Illinois","city":"Chicago"}

 

E eu não sei "TRATAR" esses dados para transformá-los em variáveis de PHP ou Javascript para fazer o REDIRECIONAMENTO. Eles disponibilizam uma API(Opcional) em PHP, mas é um código muito complexo. Estou tentando fazer os "ajustes", mas até agora não tive sucesso.

 

ALGUÉM PODERIA ME AJUDAR NISSO ???

Compartilhar este post


Link para o post
Compartilhar em outros sites

Podes converter uma variável JSON para um objecto PHP usando a função json_decode.

 

$json = '{"address":"66.249.73.188","country":"US","stateprov":"Illinois","city":"Chicago"}';
$obj = json_decode($json);

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
Visitante
11 horas atrás, wootzor disse:

Podes converter uma variável JSON para um objecto PHP usando a função json_decode.

 


$json = '{"address":"66.249.73.188","country":"US","stateprov":"Illinois","city":"Chicago"}';
$obj = json_decode($json);

 

Ótimo, já é um começo. Também poderia excluir as CHAVES "{" e "}",  com str_replace(). E depois criar uma array com os dados usando o explode(). Mas o que eu não sabia mesmo era armazenar uma consulta "EXTERNA" em um site(URL), numa variável PHP. Acabei encontrando, e é com o file_get_contents. Então o inicio do processo, após obter o IP do internauta, para consultar, é

 

$consulta = file_get_contents('http://api.db-ip.com/addrinfo?api_key=bc2ab711d740d7cfa6fcb0ca8822cb327e38844f&addr=66.249.73.188');

 

Isso faz "pescar" a consulta e armazená-la em uma variável. Daí já estamos em posse dos dados: Cidade, Estado e País do acesso. Estou elaborando o restante do código. Assim que estiver pronto vou postar ele completo aqui, para quem quiser uma solução SIMPLES e RÁPIDA para um redirecionamento por localização, sem depender de APIs, Plugins, Pacotes, Plataformas. Já que em todas as pesquisas que eu fiz sobre o assunto, não encontrei nenhuma solução AUTÔNOMA, todas possuíam DEPENDÊNCIAS.

 

Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites
Visitante

Aí pessoal, conforme prometido, o script que redireciona por geolocalização(CIDADE/ESTADO/PAÍS).

E ainda gera uma tabela de acessos contendo o IP, o País, A cidade, e a Hora em que houve o acesso.

 

1° passo: criar a tabela em algum banco de dados do seu servidor

 

CREATE TABLE acessos
(
codigo int auto_increment primary key,
data timestamp default current_timestamp(),
pais char(100),
estado char (100),
cidade char (100),
ip char (100),
pagina char(100)
);

 

Obs: O campo data, por conter default "current_timestamp()", não precisa receber data/hora(apenas NULL) e ele põe automaticamente a hora e a data em que o registro foi inserido, que é o instante do acesso.

 

O script abaixo deve ser colocado no início do índice do seu site(index.php)

 

<?php
/** Tenta Obter o IP real do cliente * @return string **/
function get_ip_real()
{
static $ip_real = null;
if ($ip_real !== null){return $ip_real;}

if (array_key_exists('HTTP_CLIENT_IP', $_SERVER))
{
$ip = trim($_SERVER['HTTP_CLIENT_IP']);
if (validar_ip($ip)){$ip_real = $ip;return $ip;}
}

if (array_key_exists('HTTP_X_FORWARDED_FOR', $_SERVER))

{
$ip = trim($_SERVER['HTTP_X_FORWARDED_FOR']);
if (validar_ip($ip)) {$ip_real = $ip;return $ip;}
elseif (strpos($ip, ',') !== false)
{
$ips = explode(',', $ip);
foreach ($ips as $ip)
{
$ip = trim($ip);
if (validar_ip($ip)){$ip_real = $ip;return $ip;}
}
}
elseif (strpos($ip, ';') !== false)
{
$ips = explode(';', $ip);
foreach ($ips as $ip) {
$ip = trim($ip);
if (validar_ip($ip)) {$ip_real = $ip;return $ip;}
}
}
}

if (array_key_exists('REMOTE_ADDR', $_SERVER))
{
$ip = trim($_SERVER['REMOTE_ADDR']);
if (validar_ip($ip)) {$ip_real = $ip;return $ip;}
}
    
$ip_real = '0.0.0.0';
return $ip_real;
}

/*
Valida um IP v4
@param string $ip: IP a ser validado
@return bool
*/

function validar_ip($ip)
{
// IPv4
$array = explode('.', $ip);
if (count($array) != 4) {return false;}
foreach ($array as $i)
{
if (!is_numeric($i) || $i < 0 || $i > 255) {return false;}
}
return true;
}

$consulta = file_get_contents('http://api.db-ip.com/addrinfo?api_key=bc2ab711d740d7cfa6fcb0ca8822cb327e38844f&addr='.get_ip_real());
$apaguetais = array('{','}','"',':','address','country','stateprov','city');
$consulta = str_replace($apaguetais, "", $consulta);
$consulta = explode(',', $consulta);

$aconect = mysql_connect('localhost', 'SEU_USUARIO_MYSQL', 'SENHA_DO_SEU_USUARIO_MYSQL');
$odb = mysql_select_db('NOME_DO_SEU_BANCO_DE_DADOS');
mysql_query("SET NAMES 'utf8'");
mysql_query('SET character_set_connection=utf8');
mysql_query('SET character_set_client=utf8');
mysql_query('SET character_set_results=utf8');

mysql_query
(
"insert into acessos values
(
NULL, 
NULL,
'$consulta[1]',
'$consulta[2]',
'$consulta[3]',
'$consulta[0]',
'RAIZ'
)
");

 

switch ($consulta[1]){
case 'BR':header('location:versao_p_brasil');
case 'US':header('location:versao_p_EUA');
default:header('location:versao_p_EUA');
}

?>

 

Nesse caso é apenas um redirecionamento para dois países, um exemplo simples. Mas, estando de posse das variáveis que representam IP($consulta[0]), País($consulta[1]), Estado($consulta[2]) e Cidade($consulta[3]), podemos usar o SWITCH para criar qualquer regra de redirecionamento ou até um conjunto de regras.

 

Não esqueçam de altera os dados para os do seu servidor:

SEU_USUARIO_MYSQL

SENHA_DO_SEU_USUARIO_MYSQL

NOME_DO_SEU_BANCO_DE_DADOS

 

OBS: Óbvio que se a pessoa estiver usando VPN(rede privada virtual), esta irá mascarar o IP, impedindo a localização REAL. Mas são raros os que utilizam tal artifício, a maioria são hackers que querem realizar "suas peripécias" sem serem localizados. E nesse caso não importa que recebam a versão INTERNACIONAL do site. Já que quase todas as VPNs atribuem um IP estrangeiro ao usuário.

 

Outra observação: Eu utilizo esta chave para a consulta no db-ip.com:

bc2ab711d740d7cfa6fcb0ca8822cb327e38844f

Mas eu "peguei" ela na internet, portanto não sei quantos já estão utilizando-a.

Essas chaves são gratuitas e permitem milhares de acessos diários, portanto você pode criar uma chave própria para não sobrecarregar esta e acabar perdendo consultas. Par criar uma chave de acesso, visite:

https://db-ip.com/api/

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por Rafael_Ferreira
      Não consigo carregar a imagem do captcha do meu formulário. Foi testado com o xampp e easyphp. Também não carregou a imagem de outros captcha. 
       
       
    • Por luiz monteiro
      Olá.
      Estou atualizando meu conhecimento com Front-End e me deparei com o seguinte problema.
      Criei um sistema para fazer o upload de imagens e alguns campos text.
      Algo bem simples para depois começar a estudar javascript para mostrar a miniatura....
      Mas quando saio do navegador Chrome ou da aba por mais de 3 minutos, ao retornar o navegador as vezes atualiza ou nem chega atualizar mas limpa os campos.
      Estou usando um Smart Motorola com Android, mas um amigo testou no iPhone e acontece a mesma coisa.
      Gostaria de saber se há como usar javascript para evitar isso?
      Agradeço desde já.

      <!DOCTYPE html>
      <html>
      <head>
          <meta charset="utf-8">
          <meta name="viewport" content="width=device-width, initial-scale=1">
          <title>Uploader</title>
      </head>
      <body>
          <form action="?" method="post" enctype="multipart/form-data">
              <br><br>
              <div>selecione a imagem 1</div>
              <input type="file" name="foto1" accept="image/*">
              <br><br>
              <input type="text" name="nome_imagem1">
              
              <br><br>
              <input type="file" name="foto2" accept="image/*">
              <br><br>
              <input type="text" name="nome_imagem2">
              
              <br><br>

              <input type="file" name="foto3" accept="image/*">
              <br><br>
              <input type="text" name="nome_imagem3">
              
              <br><br>
              <input type="submit" value="Enviar">
              <br><br>
          </form>
      <?php
      if ($_SERVER['REQUEST_METHOD'] == 'POST')
      {
          vardump ($_FILES);
      }
      ?>
      </body>
      </html>
       
       
       
    • Por belann
      Olá!
       
      Estou usando o nextjs versão 15.2.3 e criei uma navbar que quando é carregado o programa aparece com a home, mas na hora de clicar na página produtos desaparece a navbar.
      A navbar esta sendo chamada no layout.tsx estou usando typescript
      e fica dessa forma
      <div>           <Navbar/>             <main>{children}</main>             </div>  
    • Por luiz monteiro
      Olá, tudo bem?
       
      Estou melhorando meu conhecimento em php e mysql e, me deparei com o seguinte. A tabela da base de dados tem um campo do tipo varchar(8) o qual armazena números. Eu não posso alterar o tipo desse campo. O que preciso é fazer um select para retornar o números que contenham zeros a direita ou a esquerda.
      O que tentei até agora
       
      Ex1
      $busca = $conexao->prepare("select campo form tabela where (campo = :campo) ");
      $busca->bindParam('campo', $_REQUEST['campo_form']);
       
      Se a direita da string $_REQUEST['campo_form'] termina ou inicia com zero ou zeros, a busca retorna vazio.
      Inseri dados numéricos, da seguinte maneira para testar: 01234567;  12345670: 12345678: 12340000... entre outros nessa coluna. Todos os valores que não terminam ou não iniciam com zero ou zeros, o select funciona.
       
       
      Ex2
      $busca = $conexao->prepare("select campo form tabela where (campo = 0340000) ");
      Esse número está cadastrado, mas não retorna.
       
      Ex3
      $busca = $conexao->prepare("select campo form tabela where (campo = '02340001' ) ");
      Esse número está cadastrado, mas não retorna.
       
       
      Ex4
      $busca = $conexao->prepare("select campo form tabela where (campo like 2340000) ");
      Esse número está cadastrado, mas não retorna.
       
      Ex5
      $busca = $conexao->prepare("select campo form tabela where (campo like '12340000') ");
      Esse número está cadastrado, mas não retorna.
       
      Ex6
      $busca = $conexao->prepare("select campo form tabela where (campo like '"12340000"' ) ");
      Esse número está cadastrado, mas não retorna.
       
       
      Ex7
      $busca = $conexao->prepare("select campo form tabela where (campo like :campo) ");
      $busca->bindParam('campo', $_REQUEST['campo_form'])
      Não retorna dados.
       
      O  $_REQUEST['campo_form'] é envio via AJAX de um formulário. 
      Usei o gettype para verificar o post, e ele retorna string.
      Fiz uma busca com número 12345678 para verificar o que o select retorna, e também retrona como string.
       
      Esse tipo de varchar foi usado porque os números que serão gravados nesse campo,  terão zeros a direita ou na esquerda. Os tipos number do mysql não gravam zeros, então estou usando esse. O problema é a busca.
      Agradeço desde já.
       
       
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.