Итак, предположим, что вы пишете гостевую на 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 - очень мощный и гибкий язык программирования, с помощью которого можно творить очень хорошие вещи. Попробуйте сами - это интересно, это затягивает. Удач! |
Статьи с такими же тегами: — Клиент для LiveJournal.com на Perl — Система авторизации по переменным окружения. — Обработка PDF на Perl. — Использование AJAX в Perl. — Выбирая шаблонизатор на Perl. |