Анимация
JavaScript
|
Главная Библионтека Средства SSI у разных Web-серверов реализованы по-своему. Поэтому дескрипторы подстановки часто имеют различный синтаксис, а отдельные их виды поддерживаются далеко не всеми серверами. А некоторые Web-серверы вообще не поддерживают средств SSI, например Personal Web Server компании Microsoft. Дескрипторы SSI, используемые на этом занятии, совместимы с такими самыми популярными Web-серверами (на момент написания этой книги), как Apache и Internet Information Server компании Microsoft. Цель этого занятия состоит отнюдь не в том, чтобы вы узнали все о средствах SSI, поскольку их слишком много и к тому же они зависят от типа Web-сервера Тем не менее вам следует познакомиться с дескриптором SSI lexec, который в HTML-файле имеет следующий вид: <1-fexec cgi="/cgi-bin/stocfcprice.cgi*-> Встретив дескриптор texec, Web-сервер запустит CGI-программу stockprice.cgi. Результат работы этой CGI-программы помещается в HTML-поток,, который направляется броузеру. После заверщения CGI-программы остальная часть ПТМТ-файла (расположенная после дескриптора »ехес) посылается броузеру как обычно. Пример: работа с дескрипторами SSI Для данного примера создадим простую страницу, которая выводит текст "Привет, мир!", и картинку, изменяющуюся в зависимости от времени суток. Для начала нам потребуются два рисунка: один - для ночи, другой - для дня (рис. 20.3), Рис. 20,3, Изображения дня и ночи: day.jpg и nightjpg Затем нам потребуется HTML-файл с приветственным сообщением (см. ниже). Если вы создаете этот пример для себя, не забудьте о том, что ему, скорее всего, придется назначить расщирение . shtml или . stm, чтобы Web-сервер смог распознать дескрипторы SSI. <BTHL> <HEAD> <Т1ТЬЕ>Страница приветстввя</Т1ТЬЕ> </HEAD> <BODY> Добро пожаловать на кою 1л/еЬ-стран.иц/. Сейчас из окна я вету! <!-texec cgi="/cgi-bin/sunmoon.cgi"~> </BODY> </HTML> Текст программы приведен в листинге 20.2. огрма твия, вь изображен дня и t!/usr/bin/perl -w 1l: 2: 3: 4: 5: б: 7: 8: 9: f Счигаа!, что до б утра и пхзк б ве=а 10: if ($hour<6 сзг $hour>18) { 11: Simage="night.jpg-; 12: } else { 13: Simage="day.jpg"; 14: } 15: print header; 16; trint oaKIMG SRC=Simaqe" ALT="Simaqe">\iHi vse CEI qw(:all); I Узнаем EEara в 24-чассвсм фсрию с гоещею фунщш localtiitBO. $hour=(localtime)[2]; щ $image; на ре Проведем анализ программы. Строка 3. Поскольку это CGI-программа, необходимо подключить модуль CGI. Директива qw( :а11)гарантирует возможность использования любых функций модуля. Строка 6. Функция localtime в контексте списка возвращает список элементов, описывающих текущее время (подробнее об этом мы говорили на 4-м занятии, "Укладка строительнтх блоков: списки и массивы"). При заключении в круглые скобки функция localtime рассматривается в контексте списка, а элемент означает, что будет возвращен третий элемент списка (счет ведется с нуля) и присвоен переменной Shour. Этот элемент списка представляет собой время в 24-часовом формате. Строка 15. Заголовок, оговоренный протоколом HTTP, по-прежнему должен выводиться с помощью функции header модуля CGI, несмотря на то, что, казалось бы, половина Web-страницы уже готова. Строка 16. В дескрипторе <IMG>, предназначенном для вывода изображения, указывается либо значение $day, либо значение $nignt, а дескриптор ALT используется на случай, если броузер не сможет вывести это изображение. Текс фаницы, отображенной броузером следующий вид: в 8 часов утра, будет иметь <HTML> <HEAD> <Т1ТЬЕ>Страница нряветствия</Т1ТЬЕ> </HEAD> <BODY> Добро пожаловать на но» Web-страницу. Сейчас из окна я вижу: <IMG SRC="day.jpg" ALT="day.jpg"> </BQDY> </HTML> Выглянем из окна БОЛЬШИНСТВО рассмотренных до сих пор функций из модуля COI предназначены либо для управления броузером (функция header), либо для обработки параметров, переданных CGI-программе (функции escape и param). Кроме них в модуле CGI разработан целый набор функций, предназначенных для получения информации о типе броузера и сервера. Получить представление о таких функциях можно из табл. 20.1, а полный их список приведен в электронной документации на модуль COI, к которой можно получить доступ, введя после приглашения команду perldoc COI. Большинство описанных в этом разделе функций зависит от значений, которые предоставляются Web-сервером или посылаются Web-броузером в сеансе связи с сервером через протокол HTTP, При этом следует иметь в виду, что Web-броузеры не всегда сообщают точные сведения (например, что касается значения referer или user agent), да и Web-cepeepy могуг обмануть ваши ожидания (например, в отношении значения server name). Таблица 20.1. Неполный список информационных функций Функция Описание referer Возвращает URL гиперссылки, с помощью которой будет осуществлен переход к этой странице. (Да, сформулировано неправильно. В оригинальном документе стандартов Internet, описывающем это поле, присутствовала орфографическая ошибка, которая намеренно не исправлена для согласованности документов.) user agent Возвращает строку, идентифицирующую тип Web-броузера, который запросил страницу (например, броузеры Netscape, IE или Lynx) remote host Возвращает либо имя компьютера (host), либо IP-адрес системы, которая запросила страницу. Получаемое значение зависит от того, как сконфигурирован ваш Web-сервер и доступно ли для него имя удаленного компьютера (hostname) script name Возвращает имя данной CGI-программы в виде части URL (например, /cgi-bin/foo.cgi) Возвращает имя сервера, на котором работает virtualhOBt Возвращает имя виртуального Web-сервера, который использовался для выполнения данной CGI-программы. Эта функция отличается от функции server name, поскольку зачастую один сервер может управлять несколькими Web-узлами. Функция virtual host возвращает имя конкретного узла, который был затребован Использование этих функций демонстрируется на примере следующей короткой программы: tl/usr/bin/perl -w use strict; use CGI qw(:all); print header; 20- C. Работа с 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 |