Ir para conteúdo

POWERED BY:

Arquivado

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

inforsis

Redirecionamento por IP

Recommended Posts

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

Explode

Array

getenv

 

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

mto bom o script, mas é 100% garantido que a faixa de ips de todos os servidores do brasil são esses ai?

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites
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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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");

?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

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;
        }

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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");
$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;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

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;
        }

Compartilhar este post


Link para o post
Compartilhar em outros sites

É 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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

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