Гостевая книга на Perl

Автор: Topol Суббота, Август 11th, 2012 Нет комментариев

Рубрика: Perl

Наиболее типичным примером программирования является Гостевая книга.
В этой статье мы с Вами напишем простенькую Гостевую книгу, записывающую данные в файл.

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

#!/usr/bin/perl use strict; # Директива для ужесточения стилистического контроля use CGI; # подключаем модуль CGI my $gb_path="gb.dat"; #Файл, где будут храниться записи my $query=new CGI; # создаем объект CGI #Если запрос нулевой то выводим список сообщений if(!$query->param){     #Заголовок     print $query->header,$query->start_html('Записи в гостевой книге');     #Открываем файл     open(GB_DAT,"$gb_path")|| die("Невозможно открыть файл - $gb_path");     my @lst=<GB_DAT>; # Помещаем строки в массив     #Выводим данные     for(my $i=@lst-1;$i>=0;$i-=3){ # пробегаемся по всем строкам         # выводим имя автора как ссылку на его e-mail         print "<hr>Автор: <a href=mailto:$lst[$i-1]>$lst[$i-2]</a><br>";         # выводим сообщение         print "Сообщение:<br>$lst[$i]<br>";     }     #Закрываем файл     close(GB_DAT);     #Вывод формы записи сообщения     print <<HTML; <form action=gb.cgi method=post> <input type=hidden name=action value=add> Ваше имя: <input type=text name=aname><br> E-mail:<input type=text name=email><br> Сообщение:<textarea name=mess></textarea><br> <input type=submit value=Записать><input type=reset value=Очистить> </form> HTML     print $query->end_html; # конец html-документа }else{     #Обработка данных из формы     #Открываем файл для дописи     open(GB_DAT,">>$gb_path")|| die("Невозможно открыть файл - $gb_path");     # Блокируем файл для записи другими пользователями     flock(GB_DAT,2)|| die("Невозможно заблокировать файл - $gb_path");     #записываем данные     print GB_DAT $query->param('aname')," ";# Имя записавшего     print GB_DAT $query->param('email')," "; # E-mail     my $message=$query->param('mess'); # считываем сообщение     $message=~tr/ / /; #Заменяем возвраты каретки на пробелы     print GB_DAT "$message "; # Записываем сообщение в файл     #Закрываем файл     close(GB_DAT);     #Перенаправляем пользователя на список     print $query->redirect('gb.cgi'); }

Данные записываются в файл указанный в переменной $gb_path. Для работы необходимо создать файл указываемый в gb_path и установить ему права на запись (для Unix).

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

Замечания по работе скрипта…

  1. Скрипт носит демонстрационный характер и содержит минимум форматирования.
  2. Цель написания данного скрипта заключается в демонстрации обработки форм и записи результатов в файл.
  3. Данный скрипт проверен на Apache под операционными системами Win2000 и FreeBSD.
  4. Источник:  internet-technologies.ru

Оставить комментарий

Чтобы оставлять комментарии Вы должны быть авторизованы.

Похожие посты