Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Boa Tarde a todos!
Então vamos a um simples script para Redirecionar um site que seja dividio em idioma no exemplo usarei inglês e português.
Conceitos
O Script:
<?
$ip = getenv("REMOTE_ADDR");
$array_ip = explode(".", $ip);
if ($array_ip[0] == "189" || $array_ip[0] == "200" || $array_ip[0] == "201")
Header ("Location: portugues.php");
else
Header ("Location: ingles.php");
?>
Entendendo o script:
$ip = getenv("REMOTE_ADDR");Pegamos o ip com a função getevnv("REMOTE_ADDR") e implicamos o valor para variavel $ip.
Aplicamos a função explode para assim separarmos o IP por partes a serem dividas pelo . (ponto)
Porque pelo ponto?
Pois sabemos que a mascara de IP é:
XXX.XXX.XXX.XXX
Então para redirecionar iremos usar apenas a primeira parte do IP pois temos a faixa de IP do Brasil como iniciandas por 189, 200 e 201 (podem adicionar outros inicios).
Colocamos o valor da execução da função explode no array $array_ip.
Então agora basta usar o if para verificar se a primeira parte do array é igual ao valor de uma das faixas brasileira.
if ($array_ip[0] == "189" || $array_ip[0] == "200" || $array_ip[0] == "201")
E direcionar para a página em portuguës.
Header ("Location: portugues.php");
Caso não seja um ip iniciado com uma faixa brasileira então mandando para o site em ingles.
else
Header ("Location: ingles.php");
Básicamente é isso. Caso implementem melhor o código postem o resultado. Ou se surgir alguma dúvida post. ;)
FONTE: php.net
Agradescimento: jeronymo
100% garantido que a faixa de ips de todos os servidores do brasil são esses ai?
Juninho14, Boa Noite!Assim garantir que 100% de todos os ip´s do Brasil a faixa é essa é complicado. Mais o script é apenas uma lógica que facilita bastante, bom você pode adicionar o inicio de outras faixas de ip vinda do Brasil. Mais no caso desse script o mais indicado seria você ter um idioma default (padrão) que no caso do exemplo acima é o inglês se não se encaixa a nenhuma faixa ele vai para o default. http://forum.imasters.com.br/public/style_emoticons/default/natal_wink.gif
Sugrindo dúvida é só postar.
>
100% garantido que a faixa de ips de todos os servidores do brasil são esses ai?
Juninho14, Boa Noite!
Assim garantir que 100% de todos os ip´s do Brasil a faixa é essa é complicado. Mais o script é apenas uma lógica que facilita bastante, bom você pode adicionar o inicio de outras faixas de ip vinda do Brasil. Mais no caso desse script o mais indicado seria você ter um idioma default (padrão) que no caso do exemplo acima é o inglês se não se encaixa a nenhuma faixa ele vai para o default. <img src='http://forum.imasters.com.br/public/style_emoticons/<#EMO_DIR#>/natal_wink.gif' class='bbc_emoticon' alt=':natal_wink:' />
Sugrindo dúvida é só postar.
reavivando este velho topico, coloquei esse codigo na index.php mas esta dado loop de redirecionamento, no meu caso estou fazendo por cidade.
aguardo qualquer ajuda.
Acho meio tiro no pé usar dessa forma, até porque agora estamos saindo do IPv4 e migrando para o IPv6, daí o script iria por água abaixo.
Eu redireciono o meu site com a classe geoplugin. Querem que eu poste?
Prefiro para isso usar as soluções a MaxMind.
Banco de dados com IPs em relação aos países (99.5% de acertos)
http://www.maxmind.com/app/geoip_country
API para PHP:
Bom dia galera, precisando de ajuda!!!
tenho um site assim
www.minhaloja.com.br - (vazia aguardando index redirecionador)
www.minhaloja.com.br/portugues
www.minhaloja.com.br/france
www.minhaloja.com.br/spain
www.minhaloja.com.br/english
o script que me indicaram foi o abaixo, mas sempre me encaminha para o padrao(caso não ache o IP) english:
<?
$ip = getenv("REMOTE_ADDR");
$array_ip = explode(".", $ip);
if ($array_ip[0] == "189" || $array_ip[0] == "200" || $array_ip[0] == "201" | $array_ip[0] == "32" | $array_ip[0] == "63" | $array_ip[0] == "64" | $array_ip[0] == "65" | $array_ip[0] == "66" | $array_ip[0] == "67" | $array_ip[0] == "72" | $array_ip[0] == "85" | $array_ip[0] == "139" | $array_ip[0] == "143" | $array_ip[0] == "144" | $array_ip[0] == "146" | $array_ip[0] == "147" | $array_ip[0] == "150" | $array_ip[0] == "152" | $array_ip[0] == "155" | $array_ip[0] == "157" | $array_ip[0] == "161" | $array_ip[0] == "164" | $array_ip[0] == "170" | $array_ip[0] == "189"| $array_ip[0] == "192" | $array_ip[0] == "194" | $array_ip[0] == "195" | $array_ip[0] == "198"| $array_ip[0] == "204"| $array_ip[0] == "206" | $array_ip[0] == "207"| $array_ip[0] == "209" )
Header ("Location: portugues/index.php");
if ($array_ip[0] == "21" | $array_ip[0] == "66" | $array_ip[0] == "67" | $array_ip[0] == "69" | $array_ip[0] == "72" | $array_ip[0] == "80" | $array_ip[0] == "81" | $array_ip[0] == "82" | $array_ip[0] == "83" | $array_ip[0] == "84" | $array_ip[0] == "85" | $array_ip[0] == "86" | $array_ip[0] == "87" | $array_ip[0] == "88" | $array_ip[0] == "89" | $array_ip[0] == "112" | $array_ip[0] == "130" | $array_ip[0] == "138" | $array_ip[0] == "139" | $array_ip[0] == "144" | $array_ip[0] == "146" | $array_ip[0] == "147" | $array_ip[0] == "150" | $array_ip[0] == "155" | $array_ip[0] == "156" | $array_ip[0] == "157" | $array_ip[0] == "158" | $array_ip[0] == "159" | $array_ip[0] == "160" | $array_ip[0] == "161" | $array_ip[0] == "163" | $array_ip[0] == "192" | $array_ip[0] == "193" | $array_ip[0] == "194"| $array_ip[0] == "195" | $array_ip[0] == "196" | $array_ip[0] == "198" | $array_ip[0] == "199" | $array_ip[0] == "204"| $array_ip[0] == "205"| $array_ip[0] == "206" | $array_ip[0] == "207" | $array_ip[0] == "209" | $array_ip[0] == "212" )
Header ("Location: spain/index.php");
if ($array_ip[0] == "19" || $array_ip[0] == "61" || $array_ip[0] == "62" | $array_ip[0] == "64" | $array_ip[0] == "64" | $array_ip[0] == "128" | $array_ip[0] == "129" | $array_ip[0] == "130" | $array_ip[0] == "131" | $array_ip[0] == "132" | $array_ip[0] == "134" | $array_ip[0] == "137" | $array_ip[0] == "138" | $array_ip[0] == "139" | $array_ip[0] == "140"| $array_ip[0] == "141" | $array_ip[0] == "143"| $array_ip[0] == "144" | $array_ip[0] == "145" | $array_ip[0] == "146" | $array_ip[0] == "147" | $array_ip[0] == "148" | $array_ip[0] == "149" | $array_ip[0] == "150" | $array_ip[0] == "152" | $array_ip[0] == "155" | $array_ip[0] == "157" | $array_ip[0] == "158" | $array_ip[0] == "159" | $array_ip[0] == "195" | $array_ip[0] == "212" )
Header ("Location: france/index.php");
else
Header ("Location: english/index.php");
?>pode usar curl passando o ip do usuário para este site http://www.iplocationfinder.com/ ai é só direcionar de acordo com o pais retornado.
Caro
Testa ai é só um exemplo, precisa melhorar, adaptar a sua necessidade enfim.Veja se isso te ajuda.
<?php
$ip = getenv("REMOTE_ADDR");
$url = 'http://www.iplocationfinder.com/'.$ip;
$ch = curl_init();
curl_setopt( $ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; rv:1.7.3) Gecko/20041001 Firefox/0.10.1" );
curl_setopt( $ch, CURLOPT_URL, $url );
curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, true );
curl_setopt( $ch, CURLOPT_ENCODING, "" );
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
curl_setopt( $ch, CURLOPT_AUTOREFERER, true );
curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, false );
curl_setopt( $ch, CURLOPT_CONNECTTIMEOUT, 5 );
curl_setopt( $ch, CURLOPT_TIMEOUT, 5 );
curl_setopt( $ch, CURLOPT_MAXREDIRS, 10 );
$content = curl_exec( $ch );
curl_close ( $ch );
$dom = new DomDocument();
$dom->loadHTML( $content );
$td = $dom->getElementsByTagName( 'td' );
$country = trim($td->item(7)->nodeValue);
switch ($country)
{
case 'Brazil':
Header ("Location: portugues/index.php");
break;
case 'Spain':
Header ("Location: spain/index.php");
break;
case 'France':
Header ("Location: france/index.php");
break;
default:
Header ("Location: english/index.php");
break;
}Resultado:
Warning: curl_setopt() [function.curl-setopt]: CURLOPT_FOLLOWLOCATION cannot be activated when safe_mode is enabled or an open_basedir is set in /home/corte/public_html/index.php on line 8
Warning: Cannot modify header information - headers already sent by (output started at /home/corte/public_html/index.php:8) in /home/corte/public_html/index.php on line 28
---------------------------------------------------- x -----------------------------------------------------------
Vou olhar o php.ini aqui
Sim verifique se possui a extensão instalada no seu php e se a mesma se encontra habilitada em seu php.ini
Boa tarde, show de bola consegui aqui, porem tipo a america do Sul toda vai pro ingles... tentei colocar mais a Argentina porem não consegui! Como faria nesse caso? Tipo colocar toda america do sul com espanhol padrao.
<?php
$ip = getenv("REMOTE_ADDR");
$url = '[http://www.iplocationfinder.com/](http://www.iplocationfinder.com/)'.$ip;
$ch = curl_init();
curl_setopt( $ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; rv:1.7.3) Gecko/20041001 Firefox/0.10.1" );
curl_setopt( $ch, CURLOPT_URL, $url );
curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, true );
curl_setopt( $ch, CURLOPT_ENCODING, "" );
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
curl_setopt( $ch, CURLOPT_AUTOREFERER, true );
curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, false );
curl_setopt( $ch, CURLOPT_CONNECTTIMEOUT, 5 );
curl_setopt( $ch, CURLOPT_TIMEOUT, 5 );
curl_setopt( $ch, CURLOPT_MAXREDIRS, 10 );
$content = curl_exec( $ch );
curl_close ( $ch );
$dom = new DomDocument();
$dom->loadHTML( $content );
$td = $dom->getElementsByTagName( 'td' );
$country = trim($td->item(7)->nodeValue);
switch ($country)
{
case 'Brazil':
Header ("Location: portugues/index.php");
break;
case 'Spain':
Header ("Location: spain/index.php");
break;
case 'France':
Header ("Location: france/index.php");
break;
case 'Argentina':
Header ("Location: spain/index.php");
break;
default:
Header ("Location: english/index.php");
break;
}Na minha opinião o correto seria tratar cada caso separadamente. No entanto poderia usar o default como spain/index.php assim qualquer localidade diferente de : Brasil, França, EUA seria redirecionado para o espanhol .
switch ($country)
{
case 'Brazil':
Header ("Location: portugues/index.php");
break;
case 'Spain':
Header ("Location: spain/index.php");
break;
case 'France':
Header ("Location: france/index.php");
break;
case 'United States':
Header ("Location: english/index.php");
break;
default:
Header ("Location: spain/index.php");
break;
}É uma alternativa, mas o restante do mundo que é muito maior que a America do Sul veria em Espanhol... esse modo da Argentina seria errado dizer que não funcionaria para sei lá uns 6 paises? Argentina, chile, uruguai, o mexico.
Ou o oposto, criar Inglaterra, Suiça, Russia, e mais alguns para aparecer como english
Como eu disse, se for seguir a lógica imposta no script você vai precisar tratar cada caso separadamente, criar um para cada pais da America do sul e deixar o "english/index.php" como o padrão. Enfim foi por isso que usei switch para dar mais clareza na hora de tratar os casos. Faz um teste, trata todos os países da América do Sul como você tinha feito com a Argentina e volte o "english/index.php" como padrão. Creio que seja a melhor saída até por que caso o cURL falhe e não retorne nada na variável ele será redirecionado para o site em inglês correto? Ao menos a lógica é esta, seria bacana deixar em lugar visível uma caixa de seleção para alterar o idioma caso o usuário deseje. Pois se o redirecionamento não funcionar corretamente o usuário poderá trocar a linguagem manualmente.
Curl sempre desenrolando tudo né Ademilson?
ashauhsua
Bom script :clap:
mto bom o script, mas é 100% garantido que a faixa de ips de todos os servidores do brasil são esses ai?