Pergunta

Na Existe uma maneira fácil de fazer isso em PHP. Eu quero ter certeza de que apenas as solicitações da web provenientes de certos países são capazes de acessar o meu site.

Todas as idéias?

Foi útil?

Solução

Use um banco de dados de geolocalização IP (alguns são gratuitos) e $ _SERVER [ "REMOTE_ADDR"] para obter o endereço IP do visitante.

http://www.maxmind.com/app/geolitecity é livre (menos versão exata) de um comercial.

Outras dicas

Como Gilles, eu usei coisas GeoIP de MaxMind para isso no passado - configurado com a extensão PECL para a velocidade. Ele funciona razoavelmente bem, mas ...

O requisito para este tipo de coisa tende a vir de alguém que não entende que é impossível determinar com fiabilidade uma localização visitantes desta maneira. É muito importante que a pessoa pedindo para ele ser encorajados a compreender que é quase inútil. coisa típica que acontece com geo-localização no seguinte:

Cliente: Eu quero ser capaz de restringir o conteúdo por IP
Dev: Você sabe que isso é impossível de fazer de forma confiável
Cliente: Ah sim, mas esta empresa dizem que vão me vender algo que vai fazê-lo
Dev: Sim, mas não é preciso e é fácil de contornar e geralmente indica um modelo de negócio ruim para internet conteúdo baseado
Cliente: Você pode fazê-lo
? Dev: Whatever ...

... Seis meses depois ...

Cliente: Alguns dos meus visitantes têm reclamado que não podem ver o meu conteúdo e algumas pessoas más que não deve vê-lo ter sido capaz de
! Dev: / me dá um tapa cabeça

É apenas um passo de lá para "eu posso tê-lo de modo que quando um usuário clica direito em seu navegador um pequeno sinal aparece dizendo 'estas imagens são copyright Idiot Inc.' ? "

Desculpe, obviamente, com um humor cínico hoje!

Tanto as respostas (de geolocalização, agente de usuário) vai funcionar, mas pode ser derrotado. Alguém pode usar um servidor proxy, ou alterar seu agente usuário. Firefox ainda tem um plugin para o efeito.

Se você usa a resposta de Ben Dowling eo código não funcionar, tente o seguinte:

if (!in_array(substr($country, 0, 2), $allowed_countries)) {

em vez de:

if(!in_array($country, $allowed_countries)) {

Há também um pacote de pêra

http://pear.php.net/package/Net_Geo

Existem certas classes que podem detectar a localidade do agente do usuário. Tente algo parecido. Zend Framework tem uma grande classe para este Zend_Locale

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top