Добро Пожаловать  Ru.Board
 

Навигация
  • Главная
  • Форум
  • Темы
  • Топ лист
  • Файловый архив

  • Новые статьи
    Сегодня новостей ещё не поступало.

    Избранное
  • Установка Php-Nuke
  • Установка IkonBoard на локалхосте



    Форум по движку IkonBoard V.2

    Файловый архив для вебмастеров: полезные скрипты

    Форум по операционным системам: Linux, Windows, Mac


  • Поиск по сайту




    Скрипты в примерах: Пишем скрипт на Perl II: Гостевая книга
    Опубликовал Wowik 20.09.2001 02:43

    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=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'),"\n";# Имя записавшего
        print GB_DAT $query->param('email'),"\n"; # E-mail
        my $message=$query->param('mess'); # считываем сообщение
        $message=~tr/\r\n/ /; #Заменяем возвраты каретки на пробелы
        print GB_DAT "$message\n"; # Записываем сообщение в файл
        #Закрываем файл
        close(GB_DAT);
        #Перенаправляем пользователя на список
        print $query->redirect('gb.cgi');
    }


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

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

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


    КомментироватьВерсия для печати

     
    Категории
  • В помощь сисадмину
  • Все о софте
  • Вебмастеру
  • Игры
  • Hardware
  • О сайте
  • Программирование
  • Операционные системы
  • IkonBoard
  • InvisionBoard
  • Скрипты в примерах
  • Php-Nuke
  • Цифровое изображение
  • Юмор

  • Ссылки по теме
  • Форум по программированию
  • Форум "В помощь вебмастеру"
  • The Perl
  • Learn Perl
  • CPAN
  • Russian Perl Project
  • Ещё о Perl
  • Новости от Wowik


    Популярная статья в категории Perl:

    Галерея своими руками!



  • Рейтинг Mail.ru

    This web site was made with PHP-Nuke