Анимация
JavaScript


Главная  Библионтека 

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 [ 115 ] 116 117 118 119 120 121 122

41: $titl€=$l;

42: 43: 44: 45: 46: 47: 48:

if (m,<url>(.*)</url>,) { Slink=$l;

pint qq{<A HREF="$link">Stitle</A><BR>\n};

>

49: print "Авторское право принадлежит Slashdot.Org;

" материал используется с разрешения данной организации. "W. close (CF); . ~

Последняя часть этой программы - самая простая.

• Строки33-35. Здесь отображается вводная информация и время носледнего обновления кэшфа11ла.

• Строка 34. Здесь содержится некий хитроумный прием, позвольте мне его объяснить. Сначала функция stat получает информацию о файле, имя которого хранится в переменной $cache, и возвращает ее в виде списка. Далее

извлекается 9-й элемент (время последней модификации) этого списка. И,

наконец, для этого времени вызывается функция local time, которая в скалярном контексте возвращает хорошо отформатированную строку.

• Строка 43. Извлекаются разделы <title> и <url> файла заголовков сервера Slashdot. После анализа регулярного выражения соответствующие части заглавия и сохраняются в переменной $1, а затем присваиваются переменным $title и $hnk соответственно.

• Строка 45. Поскольку элемент 1> всегда идет после элемента <title>, то нри обработке элемента <url> значение обеих переменных $ title и Slink уже может быть выведено в выходной поток.

В общем случае эти регулярные выражения не следует использовать для обработки HTML-файлов. Они используются здесь, потому что XML-файл заголовков сервера Slashdot тщательно отформатирован так, что в каждой строке содержится ровно один XML-элемент. Если вам покажется, что формат этого файла изменился и эта программа не может обработать его, то следует обратиться к списку часто задаваемых вопросов сервера Slashdot, чтобы узнать, что случилось.

После того как вы запустите эту программу, результат (т.е. ее выходные данные) будет выглядеть примерно так, как на рис. 24.2.

Разумеется, вам придется приложить все свое искусство форматирования HTML-

документа, чтобы придать этим данным более привлекательный вид.

Каковы результаты опроса?

Каждый хочет быть кем-то. Каждый хочет знать, что с его мнением считаются, и что тоже важно - каждый хочет знать, насколько его мнение соответствует мнениям других. Для этого и проводятся опросы.

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



Файл помешается в каталог на Web-сервере и к его имени добавляется расширение .txt. Содержимое файла выглядит примерно так, как показано ниже, причем в нем не должно быть никаких других знаков препинания или пуст1х строк.

Ваше любимое домашнее животное:

Собака

Кошка

Рыбки

Они меня раздражают

Slashdot.Orgs Headlines as of Sat Sep 11 19:10:36 1999

Updated Hourly!

Clojt cut to MieroiuftAJjti-Ti-ust Cue How Free is BIND 3.2? !,.mu:-:2 Feato Freeze

ttS-Rus,43 Joint Fa-tt tp Monitrj Missiles УгКРгоЫеш;

mtt House Cliecit: Qui Open Source

SttaiMifHeap ofOuicldes

Cornpaq А.-шр№сс5 Thm ClientRurjimg Lir.iu-:

СуЬегсргшгигягтп aiij tlie Gii: Cijlhjrg

Aiiareesfii t!o Longer AOL СТО

Аядга iii.mipiiiv daii; for ntw rjjjttjmr

Copyright Slashdot Org. used with permission

Рис. 24.2. Выходные данные программы slashdot.cgi

Первая ма ишет в этом каталоге файл с расширением xt, выбирая последний, если там есть несколько файлов, и отображает вопросы в виде анкеты, как показано на рис. 24.3.

•Цьпр dial ru kiev ua/cgi-binydispsurvpl ~ Micros... ШШВ

~....!-,- •.. «У. иРе?- -ДЛЯТ .. г--д! > ilitfHI ukiEvua/cgi-birydispl ..r.i.i Ibpeiog .: Ccum-n

Вопрос: Ваше любимое домашнее

1 Собака С Кошка Рыбки Г Они меня , раздражают

животное

Рис. 24,3, Форма проведения опроса 24-й час. Создание интерактивного Web-сервера



Преимушество использования простого текстового файла состоит в том, что CGI-

программа может его использовать для отображения вопросов, а затем и ответов. Если вы хотите составить новый опрос, то просто поместите еще один .txt-файл в тот же каталог, и тогда CGI-профамма начнет использовать его автоматически. Все операции выполняются автоматически без вашего участия.

Когда пользователь выбирает вариант ответа и щелкает на кнопке подачи запроса (Submit), запускается вторая CGI-программа, которая записывает данные опроса в файл, находящийся в том же каталоге, что и вопросы. Если файл вопросов называется foo.txt, то ответы сохраняются в файле с именем foo.answer. Когда CGI-программа закончит запись ответа, она перечитывает все ответы и отображает результаты.

Часть I: постановка вопросов

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

1: t!/usr/bin/perl -w

3: use strict;

4: иаз ОЗЕ qw(:all);

5: ny($surw dir) ;

б: 5 s urvey dir="/web/htdoc s/poll";

8: sub fird last file- {

9: my(Stype)=§ ;

10: my(gfiles, $last file);

11: It ШТШОГ Id iBmsi ихлщшш

12: # н/жюго тит.

13: cpaiairm Ssurvey dir)

die "QiK&a npi опьпии $suivey dir: $1";

14: efiles=reverBe sort gD5)(/\.$type$/, гетЙ1Г SD) ;

15: closedir{SD);

16: $last file=5files[$tfilesl;

17: return($last file); 18: } 19:

20: sub get Jile contents {

21: my($type)=§ ;

22: шу(answers, $last -file) ;

23: 24

25: 26:

?last file=find last file($type);

return if (not ctefined $last -file) ; ) Откроем згоог файл и прочишау! его соджимэе. open(QF, "SBurvey dir/$last file")



0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 [ 115 ] 116 117 118 119 120 121 122