Анимация
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

61: print ЖБ param( "answer"), " ;

62: close CANS);

63: release loclc{);

64: } 65:

66: my{eanswers)=get t ile conteiits("answer");

67: my(%results);

68: t ПзЕСчитаау! ксжнвотво огвегсв с гоусшэо xhib

70: foreachieanswers) {

71: $r€sults{$ j++;

72: }

73: w $ansbo=0;

74: £сгш±1пу $ans (§poBS answers) {

75: $results{Sansno}=0 if (! eKists $results{$ansno));

76: print "Ответ $ans &,iri ы,фан $results{Sansno} раз<ВК>"

77: $ansno++;

78: } :

Основная программа начинается со строки 46. В этой строке данные текущего опроса сохраняются в неременных $question и @poss answers.

Начиная со строки 50 программа проверяет, дал ли пользователь ответы на вопросы. Не забывайте, что пользователь может просто щелкнуть на кнопке подачи запроса без выбора варианта ответа. Если ответ дан, то в строке 53 выполняется блокировка с помощью функции get lock (), чтобы файл результатов мог в одно и то же время обновлять только один человек (а никак не несколько!).

В строке 56 находится носледний в каталоге .txt-файл опроса - скажем, first.txt. Его расширение меняется на т.е. в итоге получается имя файла

fir St. answer. Далее этот файл открывается для записи, в него вносятся данные текущего опроса, а затем с помощью функции releasejockj )c файла снимается блокировка. Теперь в него могут спокойно вносить данные другие пользователи.

В строке 66 функция get file contents() иснользуется для получения результатов опроса. Создается хэш с именем Mults; его ключами являются номера ответов - 0, 1, 2 и т.д., а значениями - количество случаев появления каждого ответа.

Начиная со строки 74 выполняется вывод ответов. Если в хэш ults нет элемента, соответствующего данному конкретному ответу, то результату присваивается значение 0. Сам ответ и количество случаев его появления выводятся в строке 76.

И это все. На рис. 24.4 показаны данные результатов опроса. Если вы хотите улуч-щить их внещний вид, то можете сделать так, чтобы CGI-Программа отображала ответы (и результаты) в виде разноцветных таблиц и со всеми другими характерными особенностями, благодаря которым HTML-странииы выглядят так красиво и привлекательно.

Вообще говоря, чтобы рассмотренная нами CGI-программа работала, каталог, где хранятся данные опроса (в нашем примере это /web/htdocs/poll), должен быть доступен для записи всем пользователям. В системе Windows NT можно определить свойства этого каталога так, чтобы он был доступен для записи только учетной записи типа guest. В системе UNIX с помощью команды chmod нужно будет установить для каталога значение прав доступа, равное Кроме того, если вы запускаете программу опроса из командной строки, то она может создать файл типа .answer, который окажется недоступным для записи Web-серверу. В подобном случае для организации нормальной работы программы составления отчета вам, возможно, придется удалить этот файл.




Отве ака был выбран 1 раз Ответ Кошка был выбран 3 раз Отве ы6га1 бтл выбран 1 раз Отве Юни мен ажаюг бтл выбран 1 раз

1 Меигная п(Т0Вие9

Рис, 24.4. Стображе рееутатов опроса

Резюме

На этом занятии мы рассмотрели ряд программ, способных придать вашим Web-страницам некоторое разнообразие. Мы изучили программу выборки содержимого

других серверов и представления собранной информации на собственной Web-

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

Вопросы и ответы

Представляет ли угрозу для безопасности наличие на Web-сервере каталога, доступного для записи всем пользователям?

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

Правда что против меня могут возбудить дело только за то, что я позаимствовал с другого сервера всего лишь заголовки?

. Да, могут. Такие случаи уже были. В феврале 1999 года началось судебное разбирательство между фирмами Microsoft и Ticketmaster, возбужденное именно в такой ситуации. Microsoft якобы использовала "глубокие ссылки" на содержимое сервера Ticketmaster, и фирма Ticketmaster подала иск. В этом случае не было нарушения авторских прав, но наличие "глубоких ссылок" стало достаточным основанием для возбуждения дела. А в случае нарушения авторского права ситуация была бы гораздо более неприятной



я знаю один сервер, из которого хотел бы выбирать заголовки; он чем-то похож на Slashdot. Но на нем не файла, который легко поддается анализу. Вместо него мне приходится использовать обгчный HTML-файл. Как же мне провести анализ?

Если вы собираетесь анализировать HTML-файл, не пытайтесь использовать для этого регулярные выражения, составленные самостоятельно. Анализировать . HTML далеко не так просто, как кажется, и получить правильный результат почти невозможно. И даже если вы умудритесь с помощью регулярных выражений проанализировать часть HTML-кода, это сработает не во всех случаях. В CPAN есть модули для анализа HTML. Все они находятся в разделе HTML, т.е. имеют вид HTMML::*.

Семинар

Контрольные вопросы

1. Что необходимо сделать дл чения HTML-файла с Web-сервера?

а) использовать модуль IWP,

б) открыть сетевое соединение с сервером и "вытянуть" данные;

в) использовать команду lynx -dump или netscape -print.

2. Если функция get модуля завершилась неудачей, то что она вернет?

а) сообщение об ошибке "No Document";

б) пустую строку (т.е. "");

в) значение

Ответы

1. Правильный ответ - вариант а). Хотя варианты б) и в) тоже годятся, но они не так надежны и просты в использовании.

2. Правильный ответ - вариант в). См. объяснение, следующее за листингом 24.2.

Упражнения

• Результаты опроса вы можете отобразить в виде гистограммы, даже не используя графические модули. Для этого вам нужен .gif-файл размером 1x1 пиксель соответствующего цвета. Чтобы создать столбик, просто отобразите этот .gif-файл с соответствующими значениями высоты и ширины следующим образом:

<11УЮ SRC="small.gif HEIGHT=20 WIDTH=200 а11=гистограш(а"

Большинство фафических броузеров автоматически выполнят масштабирование этого маленького .gif-файладо нужного размера.

Ваша задача: сделать так, чтобы программа опроса печатала его результаты в виде гистограммы. Чтобы определить длину столбца гистограммы, нужно



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