Главная страница статей --> Советы по фотошопу, графике и хитрости в построении php кода

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

Источник: realcoding.net

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

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

#!/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.



Похожие статьи:
- Правила написания сообщений об ошибках
- PHP gzip module
- Применение cURL и libcurl в php
- Регулярные выражения, Часть I
- Perl и работа с сокетами
- Безопасно-ориентированное программирование в PHP5
- Создание индекса для сайта
- Счетчик посещений на Perl
- Python: Питон высокого полета...
- Семь изысканных рецептов для программистов
- Смогут ли пауки проиндексировать ваш web-сайт?
- Keywords - ключевой фактор успеха
- Работа с MySQL. На дорожку


Оглавление | Обсудить на форуме | Главная страница сайта | Карта сайта |

Контакты
Редакция:
[0.001]