Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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?
>
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:
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 ???
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);>
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.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/](https://db-ip.com/api/)
Devido ao ip dinâmico largamento utilizado você não vai encontrar uma maneira realmente eficiente de resolver isto.