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

Форум для тех кто начинает осваивать язык php.
Аватара пользователя
Вирус
Сообщения: 28
Зарегистрирован: Сб мар 21, 2015 7:36 am

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

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

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

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

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

Заранее благодарен.

Реклама
Аватара пользователя
Slash
Администратор
Сообщения: 2086
Зарегистрирован: Сб авг 11, 2012 7:39 am
Поблагодарили: 69 раз

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
Зарегистрирован: Вт фев 19, 2013 4:15 pm

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

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

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

lyod
Сообщения: 75
Зарегистрирован: Пн янв 06, 2014 11:13 pm
Поблагодарили: 1 раз

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

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

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

Аватара пользователя
greendev
Сообщения: 79
Зарегистрирован: Вт фев 19, 2013 4:15 pm

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

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

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

Аватара пользователя
Вирус
Сообщения: 28
Зарегистрирован: Сб мар 21, 2015 7:36 am

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

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

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

Аватара пользователя
Slash
Администратор
Сообщения: 2086
Зарегистрирован: Сб авг 11, 2012 7:39 am
Поблагодарили: 69 раз

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
Зарегистрирован: Сб мар 21, 2015 7:36 am

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

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

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

Ответить Пред. темаСлед. тема

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

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