Анимация
JavaScript
|
Главная Библионтека Эта программка содержит всего один оператор: вызов функции print. Несколько забавно выглядящий аргумент - это так называемый here-доку-мент. Он состоит из двух знаков "меньше чем" и слова, которое мы назовем конечной лексемой. Для программиста, работающего с shell, написанное, возможно, будет похоже на переадресацию ввода-вывода, но на самом деле это просто удобный способ взятия в кавычки строкового значения, занимающего несколько строк. Это строковое значение начинается на следующей строке программы и продолжается до строки, содержащей конечную лексему, которая должна стоять в самом начале этой строки; ничего другого в этой строке быть не должно. Неге-документы особенно полезны для создания HTML-документов. Первая часть этого строкового значения - определенно самая важная: строка Content-Type задает тип генерируемой выходной информации. Сразу за ней идет пустая строка, которая не должна содержать пробелов и знаков табуляции. У большинства новичков первые CGI-программы отказываются работать, потому что пользователи забывают об этой пустой строке, отделяющей заголовок (нечто вроде заголовка сообщения электронной почты) от следующего за ним необязательного тела*. После пустой строки следует HTML-документ, посылаемый в броузер пользователя, где он форматируется и отображается. Сначала добейтесь, чтобы ваша программа правильно выполнялась при вызове ее из командной строки. Это необходимый, но не достаточный шаг для того, чтобы обеспечить функционирование вашей программы как сценария, работающего на сервере. Ошибки могут возникать и в других местах программы; см, ниже раздел "Поиск и устранение ошибок в CGI-программах". Если программа должным образом работает при вызове ее из командной строки, необходимо инсталлировать ее на компьютере-сервере. Приемлемые места размещения зависят от сервера, хотя для CGI-сценариев часто используется каталог/usr/etc/httpcl/cgi-bin/K его подкаталоги. Обсудите этот вопрос с Web-мастером или системным администратором. После завершения инсталляции вашей программы в CGI-каталоге ее можно выполнять, указывая броузеру ее путевое имя в составе URL. Например, если ваша программа называется howdy, URL будет выглядеть так: http: www.SOMEWHERE.org/cgi-bin/howdy. Серверы обычно позволяют использовать вместо длинных путевых имен псевдонимы. Сервер, имеющий адрес www.SOMEWHERE.org, может запросто перевести cgi-bin/howdy, содержащийся в этом URL, в нечто вроде usr/etc/httpd/ cgi-bin/howdy. Ваш системный администратор или Web-мастер может подсказать, какой псевдоним следует использовать при обращении к вашей программе. Этот заголовок необходим для протокола HTTP, о котором мы упоминали выше. Передача параметров через CGI Для передачи параметров в CGI-программы (точнее, в большинство CGI-программ) никакие формы не нужны. Чтобы убедиться в этом, замените URL на http: www.SOMEWHERE.org/cgi-bm/ice cream ?flavor=mint. Когда вы "нацеливаете" свой броузер на этот URL, броузер не только просит Web-сервер вызвать программу ice cream, но и передает в нее строку f lavor=mLnt. Теперь дело программы - прочитать данную строку-аргумент и разобрать ее. Эта задача не так проста, как кажется. Многие программы пытаются решить ее и разобрать запрос самостоятельно, но большинство "самодельных" алгоритмов время от времени отказывают. Учитывая то, насколько сложно найти правильное решение такой задачи для всех возможных случаев, вам, наверное, не следует писать код самим, особенно при наличии отличных готовых модулей, которые выполняют этот хитрый синтаксический анализ за вас. К вашим услугам - модуль CGI.pm, который всегда разбирает входящий CGI-запрос правильно. Чтобы вставить этот модуль в свою программу, просто напишите use CGI; где-нибудь в начале программы*. Оператор use похож на оператор #include языка С тем, что в процессе компиляции извлекает код из другого файла. Но он допускает также использование необязательных аргументов, показывающих, к каким функциям и переменным из этого модуля вы хотели бы обращаться. Поместите их в список, следующий за именем модуля в операторе use,- и вы сможете обращаться к указанным функциям и переменным так, как будто они ваши собственные. В данном случае все, что нам нужно использовать из модуля CGI.pm - это функция param () **. Если аргументы не указаны, функция param () возвращает список всех полей, имевшихся в HTML-форме, на которую отвечает данный CGI-сце-нарий, (В текущем примере это поле flavor, а в общем случае - список всех имен, содержащихся в строках имя=значение переданной формы.) Если указан аргумент, обозначающий поле, то par am () возвращает значение (или значения), связанные с этим полем. Следовательно, param ("flavor") возвращает "mint", потому что в конце URL мы передали ?flavor=mint. Имена всех Perl-модулей имеют расширение рт. Более того, оператор use подразумевает это расширение. О том, как создавать свои собственные модули, вы можете узнать в главе 5 книги Programming Perl или на тап-странице perlmod( 1). Некоторые модули автоматически экспортируют все свои функции, но, поскольку CGI.pm - это на самом деле объектный модуль, замаскированный под обычный, мы должны запрашивать его функции явно. Несмотря на то что в нашем списке для оператора use имеется всего один элемент, мы будем использовать запись qw (). Благодаря этому нам будет легче впоследствии раскрыть этот список. # !/usr/local/bin/perl5 -w # программа ответа на форму о любимом сорте мороженого (версия 1) use CGI qw(param); print «END of Start; Content-type: text/html <HTML> <HEAD> <TITLE>Hello World</TITLE> </HEAD> <BODY> <Hl>Greetings, Terrans!</Hl> END of Start my $favorite = param("flavor"); print "<P>Your favorite flavor is $favorite. print <<All Done; </BODY> </HTML> All Done Как сократить объем вводимого текста Вводить все равно приходится очень много, но в CGI.pm есть множество удобных функций, упрощающих набор. Каждая из этих функций возвращает строковое значение, которое вы будете выводить. Например, header () возвращает строковое значение, содержащее строку Content-type с последующей пустой строкой, start html (строка) возвращает указанную строку как HTML-титул (название документа), hi (строка) возвращает указанную строку как HTML-заголовок первого уровня, а р (строка) возвращает указанную строку как новый HTML-абзац. Мы могли бы перечислить все эти функции в списке, прилагаемом к оператору use, но такой список разросся бы до небывалых размеров. В CGI.pm, как и во многих других модулях, имеются так называемые директивы импорта - метки, которые обозначают группы импортируемых функций. Вам нужно лишь поставить желаемые директивы (каждая из которых начинается двоеточием) в начале своего списка импорта. В модуле CGI.pm имеются такие директивы: : cgi Импортировать все методы обработки аргуметов, например param (). 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 |