Чёрный/Белый список IP на PHP

Форум для тех кто начинает осваивать язык php.
Аватара пользователя
Вирус
Сообщения: 28

Чёрный/Белый список IP на PHP

Сообщение Вирус » Сб мар 21, 2015 7:48 am

Доброго времени суток. На многих CMS, есть функционал по блокированию IP пользователя. Вводишь в форму IP, отправляешь и если пользователь с заблокированным IP попытается войти на сайт, то он получит сообщение о том, что он находится в ЧС за то та и то та.

Такой функционал мне надо прикрутить на свое маленькое творение. Если это возможно, подскажите, как это сделать без использования .htaccess.

И тоже самое надо сделать (отдельно), но только не для блокирования, а наоборот для почета.

Заранее благодарен.
Реклама
Аватара пользователя
Slash
Администратор
Сообщения: 2028
Поблагодарили: 62 раза

Re: Чёрный/Белый список IP на PHP

Сообщение Slash » Сб мар 21, 2015 9:25 am

Забиваем вручную или через форму IP, которым надо закрыть доступ. IP адреса могут храниться в отдельном файле или в базе данных. Для примера я делаю массив:

Код: Выделить всё

$arr_ip = array
(
    'XX.XXX.XXX.XXX',
    'XX.XXX.XXX.XXX',
    'XX.XXX.XXX.XXX',
    'XX.XXX.XXX.XXX',
    'XX.XXX.XXX.XXX'   
);

Вместо XX.XXX.XXX.XXX - IP заблокированных пользователей. Далее получаем IP компьютера и проверяем его наличие в массиве, если совпадений не найдено, компьютер получает доступ к сайте. Если совпадение найдено, останавливаем работу скрипта и выводим сообщение о том, что доступ закрыт:

Код: Выделить всё

$ip = $_SERVER['REMOTE_ADDR']; # Получаем IP пользователя

if (in_array($ip, $arr_ip)) # Проверяем наличие IP компьютера в черном списке
{
    exit('Вы заблокированы администратором, по причине: то та и то та.'); # Если IP был найден, останавливаем дальнейшее выполнение скрипта
}

Так же и с белым списком, только необходимо заменить строчку:

Код: Выделить всё

    exit('Вы заблокированы администратором, по причине: то та и то та.');

на то, чем у Вас присваивается почетный статус...
Аватара пользователя
greendev
Сообщения: 79

Re: Чёрный/Белый список IP на PHP

Сообщение greendev » Сб мар 21, 2015 3:09 pm

А если у пользователей IP динамический (от провайдера)?
Возможно, лучше использовать куки.
lyod
Сообщения: 76

Re: Чёрный/Белый список IP на PHP

Сообщение lyod » Сб мар 21, 2015 5:39 pm

А если у пользователей IP динамический (от провайдера)?
Возможно, лучше использовать куки.

Какая разница? Cookie можно удалить и всё. При блокировке пользователя (любыми способами) нет 100% гарантии, что он не зайдёт. Обойти блокировку можно всегда (ну, кроме момента, если аккаунт заблокируют, но это уже другое).
Аватара пользователя
greendev
Сообщения: 79

Re: Чёрный/Белый список IP на PHP

Сообщение greendev » Сб мар 21, 2015 11:09 pm

Извиняюсь, что не уточнил. Я имел в виду не блокировку, а поощрение.
Аватара пользователя
Вирус
Сообщения: 28

Re: Чёрный/Белый список IP на PHP

Сообщение Вирус » Вс мар 22, 2015 12:05 pm

Slash, спасибо, Ваш код работает. Но я бы хотел, разобраться со всем кодом, а не тока с проверкой. Мне надо: форма ввода IP для блокировки/разблокировки, скрипт, который будет записывать IP в файл, а потом проверяться при входе пользователя на сайт.
Если такое возможно, покажите, как такое сделать. А потом уже и с почетом разберемся...
Аватара пользователя
Slash
Администратор
Сообщения: 2028
Поблагодарили: 62 раза

Re: Чёрный/Белый список IP на PHP

Сообщение Slash » Вс мар 22, 2015 4:07 pm

Давайте попробуем... Для начала создадим форму для ввода IP:

Код: Выделить всё

<form action="index.php" method="post">
    Введите IP: <input type="text" name="ip"><br />
   <input type="submit" name="submit" value="Отправить" />
</form>

Теперь сам скрипт для обработки формы:

Код: Выделить всё

if (isset($_POST['submit'])) # Сработает, если была нажата кнопка
{
    if (empty($_POST['ip'])) # Сработает, если не был введены данные
   {
       echo 'Заполните форму.';
   }
   else # Если все правильно, идем дальше
   {
       $file = 'ip.php';
       if (!file_exists($file)) # Если файл отсутствует, создаем его
      {
          fopen($file, 'w');
      }
      
      $ip = $_POST['ip'] . "\r\n";
      $fopen = fopen($file, 'a'); # Открываем файл
      $action = fwrite($fopen, $ip); # Записываем IP в файл      
      fclose($fopen); # Закрываем файл
        if ($action) # Если операция прошла удачно
        {
          echo 'IP адрес успешно добавлен.';
        }
        else # Если операция прошла не удачно
        {
          echo 'Возникли проблемы, при записи файла...';
        }      
   }
}

Идем дальше. Теперь проверяем IP вошедшего на сайт, как то так:

Код: Выделить всё

$user_ip = $_SERVER['REMOTE_ADDR']; # Получаем IP пользователя
$file = 'ip.php';
$array_ip = file($file); # Получаем все IP из файла

foreach ($array_ip as $arr_ip)
{
    if ($user_ip == $arr_ip) # Сравниваем IP пользователя со всем списком
   {
       exit('Вы заблокированы администратором, по причине: то та и то та.'); # Если IP был найден, останавливаем дальнейшее выполнение скрипта
   }
}

Готово.
Аватара пользователя
Вирус
Сообщения: 28

Re: Чёрный/Белый список IP на PHP

Сообщение Вирус » Пн мар 23, 2015 12:43 pm

Большое, просто огромное спасибо Слэшу! :)
Вроде все работает, как было задумано. Ну, а с почетом думаю разберусь, буду использовать этот же код, только переменные поменяю, будет $ban_ip - заблокированные, и $honor_ip - почетные.
Ещё раз спасибо. Если, что зайду спросить! ;)

Вернуться в «PHP»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость