СтатьиПрограммирование

Гостевая книга на perl: последние штрихи.
n0xi0uzz
14 февраля 2008 12:25



Теги: perl, guest book

Итак, предположим, что вы пишете гостевую на perl и столкнулись с такой проблемой: гостевая готова, все работает, но чего-то не хватает, а именно - гостевая слишком проста. Вам хочется сделать её более "навороченной". Что ж, попробую показать вам, как можно легко, используя стандартные средства perl, сделать вашу гостевую лучше.

Часть первая. Избавляемся от мата.

Вам надоело, что всякие уроды матерятся у вас в гостевой? Сейчас я покажу, как очень легко можно сделать защиту от мата.

Для начала, создайте какой-нибудь текстовой файл, например, bad_words.dat, в котором пропишите корни всех матов - не сами маты, а именно их корни. Если вы не знаете, как найти корень слова, сходите в ближайшую среднюю школу, найдите там учителя русского языка и попросите объяснить.

Ладно, предположим, что корни слов-матов вы смогли выделить и записали их в текстовик построчно. Теперь небольшой кусочек кода, который заменит подобные корни будет заменять в словах, например, на "[цензура]".

Для начала, откроем созданный нами текстовик и загоним все его строки в один массив, например в @bad_w:

open BADW, "bad_words.dat";
@bad_w = ;
close BADW;

Затем, используя цикл foreach и оператор подстановки s///, легко и просто заменим все маты:

foreach $bad_w (@bad_w){
$bad_w=~ s/\r|\n//g;
$msg=~ s/$bad_w/[цензура]/g; #замена матов в сообщении
$nick=~ s/$bad_w/[цензура]/g; #замена матов в нике
}

Получается, что переменная $bad_w - это каждая строка из массива @bad_w, то есть корень слова-мата, везде, так как используется глобальный модификатор шаблона /g, заменяется на "[цензура]". Вот, в принципе, и всё с этим.


Часть вторая. Вешаем баны.

Итак, маты мы убрали. Но существуют такие люди, которые любят пофлудить, пооффтопить и позаниматься прочей гадостью. Заменять такую гадость вышеизложенным способом, естественно, нерационально. Проще закрыть доступ к гостевой таким людям. Нет, пусть они читают сообщения и кусают локти, а сообщения они добавлять не смогут. Сейчас я покажу, как это сделать.

Для начала, узнаем IP-адрем заходящего в вашу гостевую книгу. В этом нам поможет стандартная переменная окружения в perl:
$ip = $ENV{'REMOTE_ADDR'};
Затем, нам опять же надо создать текстовой файл, например, bans.dat, в котором построчно прописать те IP-адреса, добавления сообщений с которых нежелательно.

Создав подобный файл, перенесем все IP-адреса, прописанные там в массив, например, в @bans:
open BANS, "$bans";
@bans = ;
close BANS;

Теперь будем сравнивать каждый IP-шник из файла с переменной $ip, используя циклы foreach и if и если забаненный IP будет равен текущему IP, присвоим какой-нибудь переменной, например $ok, какое значение, например "BAD":
foreach $ban (@bans){
$ban=~ s/\r|\n//g;
if ($ip eq $ban){
$ok = "BAD";
print "";
}
}

И теперь, при добавлении этого сообщения, если переменная $ok будет равна "BAD", это сообщение добавляться не будет. Для этого, в условиях добавления сообщения, напишите примерно так:

if ($ok ne "BAD"){#добавляем сообщение}


Часть третья. Защита от флуда на F5.

Теперь мы защитимся от флуда на обновление страницы. Хоть и можно добавить адрес флудера в список банов, очищать гостевую от флуда не всегда приятно, так ведь?

Итак, сделаем так: при нажатии F5 (либо же кнопочки "обновить") после добавлении сообщения, это сообщение добавляется ещё раз, что, конечно же, нежелательно. Поэтому мы каждое новое сообщение при добавлении будем сравнивать с предыдущим, и, если оно будет равно ему, так же, как и во второй части, присвоим переменной $ok параметр "BAD". А что дальше делать с этой $ok я уже показал.Итак, приступим. Откроем файл, в котором хранятся сообщения гостевой и из последней строки, используя стандартную функцию языка split, вычислим последнее сообщение:

open FILE, "$file";
@abc = ;
close FILE;
($nick_last, $ip_last, $msg_last)= split(/;;;;;/, $abc[@abc-1]);
$msg_last=~ s/\r|\n//g;

Как вы уже, наверное догадались, все сообщения мы загрузили в массив @abc, потом из последней строки, $abc[@abc - 1], зная, что разделитель у нас между ником, IP-адресом и сообщением, узнали последнее сообщение - $msg_last. Теперь, используя цикл if, сравним последнее сообщение с добавляемым, и, если результат сравнения положителен, присвоим $ok значение "BAD":

if ($msg_last eq $msg){$ok="BAD";}

Дальше вы уже знаете, что делать, по примеру из второй части.

Эпилог. Выводы и всё такое...

Надеюсь, вы убедились в том, что используя стандартные средства замечательного языка программирования perl, можно гораздо улучшить свою гостевую книгу и моя статья вам в этом помогла.Напоследок, хочу привести вам ещё несколько примеров, которые более мелкие и менее важные, чем предыдущие.

Предположим, что отписавшийся в гостевухе человек, забыл написать свой ник. Что ж, не беда, сделаем ему ник такой, какой удобен нам:

if ($nick eq ""){$nick = "Аноним";}

То есть, если параметр $nick пуст, присваиваем ему значение "Аноним".

Также можно сделать ограничение на количество вводимых символов в сообщении, чтобы слишком много не писали вам, используя функцию substr:

$msg= substr($msg, 0, 1024);

Теперь размер сообщения будет не больше килобайта, а то, что больше - будет обрезаться.И таких примеров может быть очень много, о всех в одной статье не расскажешь. Эта статья - лишь попытка доказать, что Perl - очень мощный и гибкий язык программирования, с помощью которого можно творить очень хорошие вещи. Попробуйте сами - это интересно, это затягивает.

Удач!




Теги: perl, guest book

Статьи с такими же тегами:

Клиент для LiveJournal.com на Perl
Система авторизации по переменным окружения.
Обработка PDF на Perl.
Использование AJAX в Perl.
Выбирая шаблонизатор на Perl.

Последние комментарии:

Онанимус (01 марта 2010 06:03) :

если нужны хорошие книги по изучению английского посмотрите здесь есть много чего хорошего

englishlib.org

Онанимус (07 июля 2009 04:23) :
Новая услуга-аренда готового сайта

Аренда готового сайта, продажа, электрокамины Dimplex

Продажа электрокаминов, печей, порталов и аксессуаров. Установка, доставка бесплатно. Электрокамины Dimplex с эффектом живого пламени, электрокамины и аксессуары к ним. Широкий выбор электрокаминов Dimplex
www.interkamin.ru


Онанимус (15 апреля 2009 13:39) :
Читает: Прудовский И.
Жанр: детектив
Аудио кодек: MP3
Битрейт аудио: 96 кбит
Время звучания: 9 часов 19 мин
Описание:
Роман "Статский советник" продолжает серию романов Бориса Акунина, объединенных в литературный проект "Приключения Эраста Фандорина", и начатых конспирологическим детективом "Азазель".

Памяти XIX столетия, когда литература была великой, вера в прогресс безграничной, а преступления совершались и раскрывались с изяществом и вкусом.
Скачать sample:
http://depositfiles.com/files/dw17tp99f

Бесплатно скачать/Free download аудиокнигу Борис Акунин. Статский советник (5 частей):

http://depositfiles.com/files/3nqrsa249
http://depositfiles.com/files/ruwcno06z
http://depositfiles.com/files/vprdf29lv
http://depositfiles.com/files/it8obp2yu
http://depositfiles.com/files/z2ddilvjc


Онанимус (09 марта 2009 15:57) :
Бизнес в интернете стал таким же многообещающим, как и в реальном мире. Мы сздадим вам сайт и расположим его на первых страницах популярных поисковиков. Москва.Создание корпоратиывных web-сайтов для малого и среднего бизнеса “под ключ” раскрутка, обслуживание, оптимальные цены и сроки, качественно. http://www.l-999.ru/

Онанимус (08 января 2009 21:12) :
http://www.mpeg4.nightmail.ru/

Страничка для тех кто решил освоить понимание английского языка на слух.

На сайте вы можете приобрести диски с аудиокнигами на английском языке в формате Mp3.

Каждый DVD диск в формате Mp3 - это порядка 170 часов ценной и интересной практики!! Всего DVD дисков - 11. (Общее количество файлов, включая сериалы - 1315
Размер аудиокниг на английском языке в mp3 формате- 46,6 Гб)

Книги начитаны профессиональными дикторами, носителями языка. К части книг имеются электронные тексты на английском языке!

В коллекции представлены книги самого разнопланового уровня -как понимания, так и сфер интересов. Это фантастика, фэнтези, классика, детективы.

http://www.mpeg4.nightmail.ru/

Хотите выучить английский на уровне близком к уровню носителя языка?

Человек учится родному языку не по учебникам, а на слух, повторяя услышанные слова и фразы - это главный момент, который упускают многие авторы многих бесконечных плохих учебников. Учите язык так, как ребенок учится родному языку - на слух!

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

Очень важным моментом является то, что Вы слышите слово в контексте, в составе готовой фразы.

http://www.mpeg4.nightmail.ru/