Bem, no servidor instalei Maxmind Geo IP que é bastante útil para estes casos. Inclusive tenho-o instalado como módulo do Apache, ou seja, tenho isso na superglobal $_SERVER.
O código que tinhas, tomassantos, nunca poderia dar certo, porque a superglobal do HTTP USER AGENT não retorna o idioma preferido do utilizador. Por aí não ias mesmo a lado nenhum.
Já o código do anjo2 tem vários contras:
1) Por exemplo, se o site ipdomain.info estiver em baixo, não te vai servir de grande ajuda, ainda que não seja o caso, vai atrasar-te a velocidade do redireccionamentp pois tens de somar ao tempo de execução do script o tempo que leva a ligar a esse site.
2) Para além de que o código podia estar mais optimizado, bastaria usar file_get_contents em vez de ter que abrir com fopen() para depois chamar stream_get_contents() de depois fechar com fclose(), ainda para mais depois de chamar header(), não faz sentido e está errado.
3) Uma outra coisa é que esse site retorna o código do país em maiúsculas, por isso independentemente do IP, o código como está vai sempre assumir outro idioma que não o 'PT'.
Não leves a mal Anjo2, mas acho que devias rever esses snippets.
Eu, se não tivesse acesso ao Maxmind Geo IP e
se quisesse utilizar PHP para o efeito, provavelmente faria algo deste género:
<?php
if( stripos( $_SERVER['HTTP_ACCEPT_LANGUAGE'], 'pt' ) !== false ) {
// PT
header( 'Location: http://dominio.com/pt.html', true, 301 );
} else {
// Outro idioma...
header( 'Location: http://dominio.com/en.html', true, 301 );
}
exit;
?>
Outra coisa, embora funcione sem URL completo, as "regras HTTP" mandam que o atributo de Location na header seja um URL completo, por isso alteraria isso também.
Para evitar um redireccioamento para o 'EN' quando o 'PT' é um dos
idiomas de preferência secundária, podes substituir a condição nesta linha:
if( stripos( $_SERVER['HTTP_ACCEPT_LANGUAGE'], 'pt' ) !== false ) {
por esta:
if( preg_match('#^pt#', $_SERVER['HTTP_ACCEPT_LANGUAGE']) ) {
Até podes ir mais longe e fazeres um redireccionamento no HTACCESS, ainda poupavas uns milésimos de segundo
Era como eu faria.