Форум программистов, компьютерный форум, киберфорум
PHP
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.76/34: Рейтинг темы: голосов - 34, средняя оценка - 4.76
0 / 0 / 0
Регистрация: 30.06.2010
Сообщений: 77

Бан пользователей по IP

30.06.2010, 21:20. Показов 7177. Ответов 18
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброе время суток
есть скрипт блокировки пользователей по IP
но там надо вписывать IP в ручную(через фтп)
в файле каждый IP должен быть с новой строки
написал форму добавления, но при добавлении IP в файл , просле IP ставится пробел и перенос на новую строку..скрипт капризный и не хочет из-за этого работать..

вот скрипт
PHP
1
2
3
4
5
6
7
8
9
10
11
<?php
$ip = $_SERVER['REMOTE_ADDR']; 
$fo=fopen($file,"r");
$file=("ip.dat");
$ban = file("ip.dat"); 
$count = count($ban); 
for ($i=0; $i<$count; $i++) { 
//if($ip == $ban[$i]) { die("Доступ запрещен. $ip"); }
if (substr($ip, 0, strlen($ban[$i]))==$ban[$i]){ die("<center>Доступ запрещен</center>"); } 
} 
?>
форма добавления
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<form action='' method='POST'>
<table>
 <tr>
  <td align='right'>IP пользователя:</td>
  <td><input type="text" name="ip" size="40"></td>
 </tr>
 <tr>
  <td></td><td><input type="submit" value="Забанить" name="submit"></td>
  </tr>
  <?
if ( isset($_POST['submit']))
{
$ip = $_POST['ip'];
$ban = "$ip\r\n";
$fp = fopen ("engine/modules/ip.dat","w");  // записываем IP которые надо забанить
fwrite($fp, "$ban");
fclose($fp);
}
как сделать чтоб после IP не ставился пробел и перенос на новую строку?
и еще вопрос, как с помощью пхп вывести и отредактировать содержимое?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
30.06.2010, 21:20
Ответы с готовыми решениями:

Бан пользователей при переходе по ссылке без авторизации
Всем привет) Вот у меня есть код, но его нужно подредактировать так чтоб можно было выдать бан не авторизовываясь. То есть зашел по...

Бан или не бан, вот в чем вопрос
1) ИНДЕКСАЦИЯ | Есть сайт, загрузил ГС, проиндексировался в яше, за неделю из 6000 3000 стр. Гугл проиндексировал вообще еще больше чем...

Как узнать бан или не бан в яндексе?
Скажите пож-та как проверить сайт на бан в яндексе? Заранее благодарю.

18
 Аватар для Nazz
898 / 729 / 80
Регистрация: 12.03.2009
Сообщений: 2,804
Записей в блоге: 2
30.06.2010, 21:35
Цитата Сообщение от MainRoot Посмотреть сообщение
помощью пхп вывести и отредактировать содержимое?
вот так выводится:
PHP
1
2
3
4
5
6
7
echo "<form action='edit.php' mathod='post'>";
$name=$r['name'];//с бд
$ip=$r['ip'];
echo "<input type='text' name='name' value='".$name."' /><br />";
echo "<input type='text' name='ip' value='".$ip."' /><br />";
echo "<input type='submit' value='edit'>";
echo "</form>";
1
0 / 0 / 0
Регистрация: 30.06.2010
Сообщений: 77
30.06.2010, 21:53  [ТС]
Цитата Сообщение от Nazz Посмотреть сообщение
вот так выводится:
PHP
1
2
3
4
5
6
7
echo "<form action='edit.php' mathod='post'>";
$name=$r['name'];//с бд
$ip=$r['ip'];
echo "<input type='text' name='name' value='".$name."' /><br />";
echo "<input type='text' name='ip' value='".$ip."' /><br />";
echo "<input type='submit' value='edit'>";
echo "</form>";
скрипт не использует базу данных, все ip хранятся в файле ip.dat
0
 Аватар для Nazz
898 / 729 / 80
Регистрация: 12.03.2009
Сообщений: 2,804
Записей в блоге: 2
30.06.2010, 21:55
так, просто достаньте данные с файла, и всё))
1
Почетный модератор
 Аватар для Humanoid
11555 / 4350 / 452
Регистрация: 12.06.2008
Сообщений: 12,454
30.06.2010, 21:57
Измени строку
PHP
1
if (substr($ip, 0, strlen($ban[$i]))==$ban[$i]){ die("<center>Доступ запрещен</center>"); }
на
PHP
1
if ($ip==trim($ban[$i])) die("<center>Доступ запрещен</center>");
Кстати, тег <center> устаревший и использовать его нежелательно. Лучше заменить его на
PHP
1
..... die('<div style="text-align: center;">Доступ запрещен</div>');
1
0 / 0 / 0
Регистрация: 30.06.2010
Сообщений: 77
30.06.2010, 22:07  [ТС]
Цитата Сообщение от Humanoid Посмотреть сообщение
if ($ip==trim($ban[$i])) die("<center>Доступ запрещен</center>");
а что от этого изменится?
0
Почетный модератор
 Аватар для Humanoid
11555 / 4350 / 452
Регистрация: 12.06.2008
Сообщений: 12,454
30.06.2010, 22:25
Функция trim() уберёт из начала и из конца все пробелы, табуляции и переносы строк. Но проверка будет только на точное совпадение IP адреса, а раньше он проверял ещё и начало... например, если в списке было
Code
1
2
123.123.123
234.234.234.2
...то заблокировались бы номера и 123.123.123.9 и 234.234.234.222... в общем, всё, что начинается на номер из списка. Лично я считаю, что это не совсем корректно. Да и вообще банить целые диапазоны - это не правильно.
1
0 / 0 / 0
Регистрация: 30.06.2010
Сообщений: 77
01.07.2010, 01:02  [ТС]
Цитата Сообщение от Humanoid Посмотреть сообщение
Функция trim() уберёт из начала и из конца все пробелы, табуляции и переносы строк. Но проверка будет только на точное совпадение IP адреса, а раньше он проверял ещё и начало... например, если в списке было
Code
1
2
123.123.123
234.234.234.2
...то заблокировались бы номера и 123.123.123.9 и 234.234.234.222... в общем, всё, что начинается на номер из списка. Лично я считаю, что это не совсем корректно. Да и вообще банить целые диапазоны - это не правильно.
благодарю)

Добавлено через 59 минут
Цитата Сообщение от MainRoot Посмотреть сообщение
PHP
1
2
3
4
5
6
7
8
if ( isset($_POST['submit']))
{
    $ip = $_POST['ip'];
    $ban = "$ip\r\n";
    $fp = fopen ("engine/modules/ip.dat","w"); // записываем IP которые надо забанить
    fwrite($fp, "$ban");
    fclose($fp);
}
этот метод записи стирает имеющуюся информацию и записывает новую, как это исправить?
0
 Аватар для Nazz
898 / 729 / 80
Регистрация: 12.03.2009
Сообщений: 2,804
Записей в блоге: 2
01.07.2010, 11:07
попробуйте сначала открыть файл и считать с него данные, которые там уже есть, а потом записать и старые данные и новые...
0
Почетный модератор
 Аватар для Humanoid
11555 / 4350 / 452
Регистрация: 12.06.2008
Сообщений: 12,454
01.07.2010, 11:14
Для редактирования я бы сделал так:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
if (isset($_POST['banadd'])) // если есть что добавить
{
  $f = fopen('ip.dat','a'); // открываем файл на добавление
  fwrite($f,trim($_POST['banadd'])."\r\n"); // записываем строку с добавлением вконец перевода строки
  fclose($f); // закрываем файл
}
 
if (isset($_POST['banip'])) // если есть что удалить
{
  $nom = (int)$_POST['banip'];
  $list = file('ip.dat');  // получаем массив строк из файла
  unset($list[$nom]);  // убираем элемент массива, который нужно удалить
  file_put_contents('ip.dat',implode('',$list)); // сохраняем этот массив, предварительно объединив его в строку
}
 
$list = file("ip.dat"); // получаем массив строк из файла
echo '<form action="" method="post"><div>'; // первая форма для удаления
echo '<select name="banip">';
foreach($list as $k => $v) // перебираем все элементы массива
{
  $v = htmlspecialchars($v,ENT_QUOTES); // в целях безопасности и что бы не портить текст, переводим спец.символы в html сущности
  echo '<option value="'.$k.'">'.$v.'</option>'; // выводим очередной элемент в списке
}
echo '</select></div></form><br />';
echo '<form action="" method="post"><div>'; // вторая форма для добавления
echo '<input type="text" name="banadd" /> <input type="submit" value="Добавить" />'; // текстовое поле и кнопка
echo '</div></form>';
1
 Аватар для Bomboos
15 / 15 / 3
Регистрация: 04.10.2009
Сообщений: 219
04.07.2010, 13:24
Блин.... После ответов
Humanoid, темы можно закрывать.... Людям не даёт шансовмолодцом...
0
04.07.2010, 14:53

Не по теме:

Bomboos, зато есть с кого пример брать и темы на этом форуме не закрываются после ответа.

0
0 / 0 / 0
Регистрация: 30.06.2010
Сообщений: 77
06.07.2010, 21:11  [ТС]
Humanoid,
дельные советы даешь)
спасибо
0
0 / 0 / 0
Регистрация: 13.02.2016
Сообщений: 15
07.03.2017, 01:20
Humanoid, Апп поднял ваш скрипт и тут вопрос как сделать чтоб повторно ип в файл не записывался тобишь не дублировался? И вот еще что если в поле нет ничего и обновить страницу в файл записывается новая пустая строчка
0
Эксперт PHP
 Аватар для Kerry_Jr
3106 / 2591 / 1219
Регистрация: 14.05.2014
Сообщений: 7,236
Записей в блоге: 1
07.03.2017, 10:52
SARCASM74, это
PHP
1
2
3
4
5
6
if (isset($_POST['banadd'])) // если есть что добавить
{
  $f = fopen('ip.dat','a'); // открываем файл на добавление
  fwrite($f,trim($_POST['banadd'])."\r\n"); // записываем строку с добавлением вконец перевода строки
  fclose($f); // закрываем файл
}
замените на
PHP
1
2
3
4
5
6
7
8
9
10
11
if (!empty($_POST['banadd'])) // если есть что добавить
{
    $banadd = filter_var(trim($_POST['banadd']), FILTER_VALIDATE_IP);
    if ($banadd !== false) {
        $list = file('ip.dat', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
        if (!in_array($banadd, $list) {
             array_push($list, $banadd);
             file_put_contents('ip.dat', implode(PHP_EOL, $list);
        }
    }
}
Добавлено через 6 минут
Но лучше всего создать под эти нужды базу данных.
0
0 / 0 / 0
Регистрация: 13.02.2016
Сообщений: 15
07.03.2017, 21:25
Kerry_Jr, Извиняюсь а это под какую версию php?
0
Почетный модератор
 Аватар для Humanoid
11555 / 4350 / 452
Регистрация: 12.06.2008
Сообщений: 12,454
08.03.2017, 00:13
SARCASM74, судя по документации, filter_var() появилась начиная с версии 5.2.0. Остальные функции древние и присутствовали ещё в 4 версии.
0
0 / 0 / 0
Регистрация: 13.02.2016
Сообщений: 15
10.03.2017, 18:23
Humanoid, Спасибо большое работает)

Извиняюсь за наглость есть еще пара вопросов.

Как сделать в этому участке кода

PHP
1
2
3
4
5
6
7
8
echo '<form action="" method="post"><div>'; // первая форма для удаления
echo '<select name="banip">';
foreach($list as $k => $v) // перебираем все элементы массива
{
  $v = htmlspecialchars($v,ENT_QUOTES); // в целях безопасности и что бы не портить текст, переводим спец.символы в html сущности
  echo '<option value="'.$k.'">'.$v.'</option>'; // выводим очередной элемент в списке
}
echo '</select></div></form><br />';
вывод логин из бд нужному айпи?
Чтоб в селекторе выбора был еще и ник возле айпи
т.е. так

Иванов - 1.1.1.1.1

В Бд есть поле айпи и логин.

И второй вопрос по этому участку.
PHP
1
2
3
4
5
6
7
if (isset($_POST['banip'])) // если есть что удалить
{
  $nom = (int)$_POST['banip'];
  $list = file('ip.dat');  // получаем массив строк из файла
  unset($list[$nom]);  // убираем элемент массива, который нужно удалить
  file_put_contents('ip.dat',implode('',$list)); // сохраняем этот массив, предварительно объединив его в строку
}
Как все же удалять кнопкой чтоб не лесть постоянно в файлик?

Сильно не пинайте я новичок в php Заранее большое спасибо)
0
0 / 0 / 0
Регистрация: 13.02.2016
Сообщений: 15
14.03.2017, 21:08
Поможет кто нить? HELP HELP ME
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
14.03.2017, 21:08
Помогаю со студенческими работами здесь

Бан или не бан? вот в чём вопрос
Сегодня заметил что в индексе яши осталась только морда но прикол не в том при проверке в сапе индексации страниц часть страниц оказывается...

А все таки бан или не бан...
b-( Уважаемые коллеги, пожалста подскажите, вот такой отрывок кода опасен ли? На странице находится как заголовок сайта. &lt;h1...

Связать группы пользователей из мастер защиты на уровне пользователей с должностями пользователей в БД
Интересный вопрос и интересно как его решить. Изначально условия следующие: один компьютер, один рабочий стол, одна база...

Бан или не бан
Подскажите. Как проверить сайт в бане или нет.

бан или не бан?
Помогите пож-ста разобраться. САйт mnebiokna.ru. Было в индексе весь сайт. Причем как с www так и без. Основным считал без www. Сегодня без...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru