Анимация
JavaScript
|
Главная Библионтека функция header в CGl-модуле информирует броузер о том, данные какого тина он будет цолучать. Для этого иснользуется заголовок MIME Content-Type, который они-сывает содержимое данных, следующих за ним. В результате броузер сразу "узнает", что ему нужно делать с полученными данными. По умолчанию функция header носылает броузеру заголовок Content-Type тина text/html И броузер "понимает", что за заголовком следует содержимое, представляющее собой текст в формате HTML. Предупредив броузер о типе получаемых данных, вы можете таким образом управлять способом обработки этих данных броузером. Данные могут выводиться в виде изображений, звука, передаваться дополнительному модулю броузера (browser plug-in) или внешней программе, запускаемой броузером. Чтобы заставить функцию header послать нечто, отличное от обычного заголовка типа text/html, используйте ключ -type: header {-type Среди тех типов MIME, указываемых в заголовке Content-Type, которые обычно посылаются броузеру, чаще других встречаются text/plain (для текстов, не подлежащих интерпретации броузером), image/gif и image/jpeg (для GIF- и JPEG-изображений), а также (для данных, относящихся к конкретному приложению с именем аррпаше). Есть -еше снециальный тин MIME заголовка Content-Type application/octet-steam, означающий передачу необработанных двоичных данных, которые броузер должен просто сохранить в файле. Описанные выше типы данных пригодятся вам на случай, если вы захотите создать Web-узел, показывающий "изображение дня" или рекламу Web-страниц Ежедневное изменение Web-странии для отражения нового образа может превратиться в проблему. А если при этом вас не будет на месте, кто обновит "изображение дня"? Чтобы существенно облегчить себе жизнь, можно создать статическую HTML-страницу и написать CGI-программу на языке Perl, которая бы автоматически каждый день выводила новое изображение. Для решения проблемы поместите следующий HTML-код в тело Web-страницы: <Body> КЬзобранениэ дан: <IM3 SRC="/cgi-bin/daily image.cgi"> </Bo В приведенном фрагменте HTML-кода обратите внимание, что в дескрипторе <М:> указана CGI-программа, а не GIF- или JPEG-изображение. Затем вам потребуется папка с изображениями, которых должно хватить хотя бы на месяц. Вы можете использовать любые изображения, главное, чтобы их файлы имели расширение . jpeg. К тому же заметьте, что эту программу можно легко адаптировать для изображений в формате GIF. может иметь вид, представленный в листинге 20.1. стин 20.1. огрма, обеспе вывод "изображен дня" 1 iH/usr/bia/perl -v 3: use strict; 4: use CGI qw (-.all); 5: my($imagedir, $day, Sjpegs, Serror); 7: SiMgedir="/web/htdocs/picof day"; 8: 9: 5error="/web/htdoc s/images/error.jpg" 10: sub display iiiiage { 11: 12: 13: 14: 15: 16: 17: 18: 21: 22: 23: my(Siinage)=§ ; open {IMAGE, «$iciage) II exit; binmode STDOUT;. binmode BEGE; pcint <IME; cloe(IMaGE); print headerC-tape => image / jpeg); t Димэсящ, 1-28, 29, 30 или 31 $day=(localtime)(31; $day=$day-l; t хстим исгсжЕОСнь дни 0-27, и . 25 R, $ijJiagedir) display image {S err or); 26: ijpegs=Bortgr{/\.jpg$/, readdirlMto); 27: closedii{ICtt); 29: w$iiiBge="$iiiBgeciir/$jpegs[$d]"; 30: $image=$error if (irt defitBd Sipegs[$day]); 31: display image(jimage); \ Проведем анализ программы. Строка 7. В этой строке задается каталог, в котором располагаются файлы изображений. Этот каталог можно заменить другим, соответствующим физическому расположению ваших файлов изображений. Строка 8. Как ни странно, но, поскольку эт фамма не втдает никакого текста и поскольку HTML-страница, в которую она встроена, не отображает результат в виде текста, вы не можете просто выводить сообщения об ошибках. Если каталог Simagedir невозможно будет открыть, то будет отображен . jpg-файл, имя которого содержится в переменной Serror. Строки 10-16. Эта процедура выводит изображения в стандартный выходной поток, который будет направлен броузеру. На Windows-платформах поток STDOUT рассматривается как текстовый файл, значит, при выводе . jpg-файла в поток DCUT изображение будет искажено. Поэтому, чтобы сделать дескрипторы :CUT и бинарными, используется функция binmode. Под управлением системы UNIX нет необходимости в использовании функции binmode, но ее присутствие не повредит. Обратите внимание на строку 12: если изображение не удается открыть, нет смысла в выводе сообщения об ошибке, поэтому просто выполняется выход из программы. Строка 19. Эта строка выводит стандартные головок, за исключением того, что в строке Content-Type вместо обычного типа text/html используется image/jpeg. Строка 25. Открывается каталог с изображениями для чтения. Если каталог с изображениями не открывается, то вызывается функция display iiiiage(), которой через переменную Serror передается имя файла с изображением ошибки. • Строка 26. Эта строка посложнее других, поэтому на ней стоит остановиться. Сначала содержимое каталога читается с помощью функции readdir. Затем из списка извлекаются имена файлов с расширением .jpg. Наконец, полученный снисок сортируется и нрисваивается неременной в jpegs. Подробнее о вызове CGl-програлллл До сих пор мы говорили о двух разных методах запуска щограмм. Первый и самый очевидный просто поместить ее в гиперссылку или ввести его в поле Адрес окна броузера. Например, чтобы выполнить CGI-программу с именем time.cgi, используйте следующую строку: <ABREF="http: server/cgi-bin/time.cgi ">Щелкните здесь</Д> После установки сеанса связи Web-сервер выполнит COI-программу time.cgi и отправит броузеру результат ее работы, т.е. образ новой Web-страницы. Это пример запуска простейшей CGI-программы, подобной той, которую мы рассматривали на 17-м занятии, "Введение в COI". Другой способ запуска CGI-программы - включение ее имени в код HTML-формы. Например, следующая форма вызывает CGI-программу process.cgi после щелчка на кнопке подачи запроса Submit: <FORM METHOD=GET ACTION="/cgi-bin/process.cgi"> <1КРИТ TYPE=TEXT tIAME=STUrF><BR> <iNpaT турв=завм1т> </FORM> Этот метод вызова COI-программы имеет дополнительное преимущество: он позволяет передавать COI-программе параметры для обработки. Пожалуй, это свойство форм можно назвать одним из самых полезных. Передача параметров COI-программе Полезность и гибкость COI-программ существенно возрастают за счет передачи им дополнительных параметров прямо из гиперссылки. Например, можно создать ги-пересылку в документе, которая запускает CGI-программу foo.cgi и передает ей два параметра Хи Y, равнгх некоторым величинам. Для этого в дескрипторе <А LKEI> нужно задать URL специального вида. Формат этого URL показан на рис. 20.1. Разделитель параметров Признак наличия Адрес сервера параметров http: / /www .foo. сод/cgi-bin/prog. cgi?n№e=Mngo&jobadruflmer Тип Пул. к И (ля протокола CGI-программе параметра параметра Значение Значение параметра параметра Рис. 20.11с парамрами Каждый параметр представляет собой имя некоторого значения, которое будет передано COI-программе (подобно именованному элементу HTML-формы) Под значением параметра понимается некоторая строка, присваиваемая этому имени. Напри- 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 |