Как ограничить, какие страны могут просматривать мой сайт (PHP)

В этом есть простой способ сделать это в PHP. Я хочу убедиться, что только веб-запросы из определенных стран могут получить доступ к моему веб-сайту.

Любые идеи?

Ответ 1

Для получения IP-адреса посетителя используйте базу данных геолокации IP (некоторые из них бесплатны) и $_SERVER [ "REMOTE_ADDR" ].

http://www.maxmind.com/app/geolitecity является бесплатной (менее точной) версией коммерческой версии.

Ответ 2

Как и Gilles, я использовал материал MaxMind GeoIP для этого в прошлом - настроен с расширением PECL для скорости. Он работает достаточно хорошо, но...

Требование к подобным вещам имеет тенденцию исходить от кого-то, что не понимает, что невозможно надежно определить местоположение посетителей таким образом. Очень важно, чтобы человек, просящий об этом, был призван понять, что он почти бесполезен. Типичная вещь, которая происходит с геолокацией в этом:

  

Клиент: я хочу, чтобы иметь возможность ограничивать контент по IP-адресу     Dev: Вы знаете, что это невозможно сделать надежно?
    Клиент: Ах да, но эта компания заявляет, что они продадут мне что-то, что сделает это
    Dev: Да, но это не точно и легко обойти и обычно указывает на плохую бизнес-модель для интернет-контента

    Клиент: Можете ли вы это сделать?
    Dev: Что бы ни...

  

... Шесть месяцев спустя...

  

Клиент: некоторые из моих посетителей жалуются, что не могут видеть мой контент и некоторые плохие люди, которые не должны видеть, что это возможно!
    Dev:/me slaps head

  

Это всего лишь один шаг оттуда, чтобы "я могу это сделать, чтобы, когда пользователь щелкает правой кнопкой мыши в своем браузере, появляется небольшой знак, говорящий ", эти изображения являются авторскими правами Idiot Inc.?

Извините, очевидно, в циничном настроении сегодня!

Ответ 3

Оба ответа (геолокация, пользовательский агент) будут работать, но могут быть побеждены. Кто-то может использовать прокси-сервер или изменить свой агент пользователя. У Firefox даже есть плагин для этой цели.

Ответ 4

если вы используете ответ Бен Доулинг и код не работает, попробуйте следующее:

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

вместо:

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

Ответ 6

Существуют определенные классы, которые могут определять локаль пользовательского агента. Попробуй что-нибудь подобное. Zend Framework имеет отличный класс для этого Zend_Locale