введение в perl☛Документация Perl ✎ |
Обсуждение: Запись в файлы
Одно из действий, которое вы можете совершить над данными, это записать их в файл. Perl предоставляет набор функций для открытия, обработки и закрытия файлов. Таким образом вы можете создать новый HTML документ, добавить данные в уже существующий HTML документ или сохранить данные в текстовом файле для дальнейшей обработки.
Функция открытия файла выглядит следующим образом:
open (HANDLE, "name"); # Открыть файл для чтения
open (HANDLE, ">name"); # Открыть файл для записи
open (HANDLE, ">>name"); # Открыть файл для добавления в конец
HANDLE является любым временным именем, который вы будете использовать как идентификатор файла при проведении операций. Как только файл открыт, вы можете писать в него, используя функцию print:
print HANDLE "Этот текст будет помещен в файл как есть.n";
print HANDLE "В этом случае переменная ",$variable," будет помещена в текст.";
print HANDLE "Переменную $variable можно помещать в текст и так.n";
print HANDLE "Кавычки и др. Спецсимволы ; надо "подсекать".n";
После завершения операций с файлом необходимо его закрыть:
close (HANDLE);
После этого все записанные данные будут сохранены на диск.
Перед осуществлением запись в файл, вы должны убедиться, что web-сервер имеет доступ к директории, в которой находится файл и имеет права на запись в этот файл.
Обратите внимание: функция close должна располагаться как можно ближе к последней функции записи в файл. Это обусловлено тем, что web-сервер выполняется в многопользовательской среде, и скрипт может запускаться одновременно несколькими пользователями. При открытии файла на запись он (файл) блокируется и другие экземпляры скрипта не смогут его открыть, что вызовет задержку в выполнении запроса.
Пример: Создание новой HTML страницы
Следующий пример может показаться на первый взгляд сложным, но все что он делает, это пишет некоторую информацию в файл.
В связи с тем, что мы создаем web-страницу файл содержит тэги HTML вместе с обычным текстом. Помните, что n просто вставляет перевод строки в текст для удобства последующего просмотра созданного файла.
Все входные данные из формы содержатся в переменных $input{field_name}. При печати такие переменные должны выноситься за кавычки и отделяться запятыми.
# Определяем переменную, содержащую путь к записываемому файлу
$newfile = "c:webserverhtdocsmynewpage.html";
# Открываем файл, используя идентефикатор USERINFO
open (USERINFO, ">$newfile");
# Формируем содержимое
print USERINFO "<html>n<head>n";
print USERINFO "<title>Информация о регистрации</title>n</head>n";
print USERINFO "n<body>n<h3>Данные регистрации:</h3>";
print USERINFO "<p><hr></p>n<p>n";
print USERINFO "Имя: ", $input{'user_name'},"n<br>";
print USERINFO "Компания: ", $input{'co_name'},"n<br>";
print USERINFO "Телефон: ", $input{'phone'},"n</p>n<p><hr></p>n";
print USERINFO "<!-- NEW INSERTS GO HERE -->nn</body>n</html>";
# Закрываем файл
close (USERINFO);
Пример: Добавление в конец файла
Запись в существующий файл проста, когда вы хотите добавить новую информацию в конец файла. Например, для добавления данных о новом пользователе в созданный выше файл вам потребуется следующий скрипт:
# Определяем переменную, содержащую путь к записываемому файлу
$targetfile = "c:webserverhtdocsmynewpage.html";
# Открываем файл, используя идентификатор NEWINFO
open (NEWINFO, ">>$targetfile");
# Добавляем новые данные в файл:
print NEWINFO "nn";
print NEWINFO "Имя: ", $input{'user_name'},"n<br>";
print NEWINFO "Компания: ", $input{'co_name'},"n<br>";
print NEWINFO "Телефон: ", $input{'phone'},"n</p>n<p><hr></p>n";
close (NEWINFO);
Пример: Добавление в середину существующего файла
Более сложной задачей является вставка новых данных в середину файла. Обратите внимание, что в первом примере мы вставили в файл линию комментария, выглядящую следующим образом:
<!-- NEW INSERTS GO HERE -->
Этот комментарий будет служить нам меткой места, в которое нужно вставлять новые данные. Данный пример содержит не совсем изящное решение, но прост в реализации и понимании. Он использует временный файл, хотя можно обойтись и без него:
# Определяем переменную, содержащую путь к исходному файлу
$origfile = "/pathname/originalfile.htm";
# Определяем переменную, содержащую путь к временному файлу
$newfile = "/pathname/newfile.htm";
open(INFILE, "<$origfile");
open(OUTFILE, ">$newfile");
while ($line = <INFILE>) {
printf OUTFILE $line;
if ($line =~ /<!-- NEW INSERTS GO HERE -->/i) {
# Добавляем новые данные в файл:
print OUTFILE "nn";
print OUTFILE "Имя: ", $input{'user_name'},"n<br>";
print OUTFILE "Компания: ", $input{'co_name'},"n<br>";
print OUTFILE "Телефон: ", $input{'phone'},"n</p>n<p><hr></p>n";
}
}
# Закрываем файлы
close(INFILE);
close(OUTFILE);
# Удаляем исходный файл и переименовываем новый в исходный
unlink($origfile);
rename($newfile, $origfile);
Пример: Отправка данных по e-mail
Иногда вам может потребоваться, чтобы данные введенные в форму были посланы по некоторому адресу электронной почты.
Для этого вам потребуется программа посылки почты с интерфейсом командной строки. Под UNIX это может быть sendmail или mail. В данном примере данные посылаются с помощью программы sendmail. Вместо записи в файл мы используем запись в специально открытый канал (pipe):
# Адрес e-mail
$sendto = "webmaster@telesputnik.ru";
# Открываем канал
open (MAIL, "| /usr/bin/sendmail $sendto")
# Печатаем в канал в специальном формате
print MAIL "From: Web-серверn";
print MAIL "To: $sendton";
print MAIL "Subject: Ввод новых данных";
print MAIL "Кто-то воспользовался формой для ввода новых данных";
print MAIL "Вот что он ввел:";
print MAIL "Имя: ", $input{'user_name'},"n";
print MAIL "Компания: ", $input{'co_name'},"n";
print MAIL "Телефон: ", $input{'phone'},"n ";
# Посылаем письмо, закрывая канал
close (MAIL);
Обсуждение: Создание web-страниц "на лету"
Последней важной частью Perl скрипта является посылка результата обратно пользователю. Это достигается тем же print, но без идентификатора файла или канала. Все, что печатается на стандартный выход формирует текущий документ в окне браузера. Например:
print "Content-Type: text/htmlnn";
print "<html>n<head>n<title>Спасибо</title>n</head>";
print "<body>n<h1>Спасибо за заполнение формы</h1>";
print "Мы получили ваше имя, место работы и телефон,";
print " которые вы видите ниже:<br>n";
print "Имя: ", $input{'user_name'},"n<br>";
print "Компания: ", $input{'co_name'},"n<br>";
print "Телефон: ", $input{'phone'},"n</p>n<p><hr></p>n";
print "</body>n</html>";
Обратите внимание на первую строку. Эта строка содержит информацию о типе возвращаемых данных. Двойной перевод стоки при этом обязателен. Эта страница будет возвращена пользователю почти сразу после нажатия им кнопки Submit.
Учтите, что это всего лишь один из многих примеров того, какой может быть страница "на лету". В принципе вы можете формировать HTML документ любой формы и содержания.
Продолжение статьи: ч.1 Продолжение статьи: ч.2 Продолжение статьи: ч.3 Продолжение статьи: ч.4 Продолжение статьи: ч.5 Продолжение статьи: ч.6 Продолжение статьи: ч.7 Продолжение статьи: ч.8 Продолжение статьи: ч.9 Продолжение статьи: ч.10
Другие материалы по теме:
- использование библиотеки mime-base64- Почему Flash умер, и что ждет современные технологии?
- практическое применение perl-скриптов
- Perl для чайников от ns
- AI в веб-разработке: Заменит ли нейросеть программистов?
