Как ограничить, какие страны могут просматривать мой веб-сайт (PHP) - PullRequest
11 голосов
/ 03 октября 2008

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

Есть идеи?

Ответы [ 6 ]

13 голосов
/ 03 октября 2008

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

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

9 голосов
/ 03 октября 2008

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

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

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

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

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

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

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

4 голосов
/ 03 октября 2008

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

2 голосов
/ 22 января 2015

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

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

вместо:

if(!in_array($country, $allowed_countries)) {
1 голос
/ 03 октября 2008

Есть также грушевый пакет

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

0 голосов
/ 03 октября 2008

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...