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

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

Есть идеи?

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

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

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

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

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

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

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

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

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

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

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

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

вместо:

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

Там также пакет груши

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

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