В этом есть простой способ сделать это в PHP. Я хочу убедиться, что только веб-запросы из определенных стран могут получить доступ к моему веб-сайту.
Любые идеи?
В этом есть простой способ сделать это в PHP. Я хочу убедиться, что только веб-запросы из определенных стран могут получить доступ к моему веб-сайту.
Любые идеи?
Для получения IP-адреса посетителя используйте базу данных геолокации IP (некоторые из них бесплатны) и $_SERVER [ "REMOTE_ADDR" ].
http://www.maxmind.com/app/geolitecity является бесплатной (менее точной) версией коммерческой версии.
Как и Gilles, я использовал материал MaxMind GeoIP для этого в прошлом - настроен с расширением PECL для скорости. Он работает достаточно хорошо, но...
Требование к подобным вещам имеет тенденцию исходить от кого-то, что не понимает, что невозможно надежно определить местоположение посетителей таким образом. Очень важно, чтобы человек, просящий об этом, был призван понять, что он почти бесполезен. Типичная вещь, которая происходит с геолокацией в этом:
Клиент: я хочу, чтобы иметь возможность ограничивать контент по IP-адресу Dev: Вы знаете, что это невозможно сделать надежно?
Клиент: Ах да, но эта компания заявляет, что они продадут мне что-то, что сделает это
Dev: Да, но это не точно и легко обойти и обычно указывает на плохую бизнес-модель для интернет-контента
Клиент: Можете ли вы это сделать?
Dev: Что бы ни...
... Шесть месяцев спустя...
Клиент: некоторые из моих посетителей жалуются, что не могут видеть мой контент и некоторые плохие люди, которые не должны видеть, что это возможно!
Dev:/me slaps head
Это всего лишь один шаг оттуда, чтобы "я могу это сделать, чтобы, когда пользователь щелкает правой кнопкой мыши в своем браузере, появляется небольшой знак, говорящий ", эти изображения являются авторскими правами Idiot Inc.?
Извините, очевидно, в циничном настроении сегодня!
Оба ответа (геолокация, пользовательский агент) будут работать, но могут быть побеждены. Кто-то может использовать прокси-сервер или изменить свой агент пользователя. У Firefox даже есть плагин для этой цели.
если вы используете ответ Бен Доулинг и код не работает, попробуйте следующее:
if (!in_array(substr($country, 0, 2), $allowed_countries)) {
вместо:
if(!in_array($country, $allowed_countries)) {
Там также пакет груши
Существуют определенные классы, которые могут определять локаль пользовательского агента. Попробуй что-нибудь подобное. Zend Framework имеет отличный класс для этого Zend_Locale