|
image/gif
Затем копируем один-в-один нужный нам GIF-файл в стандартный поток вывода
(лучше всего — функцией fwrite, т. к. иначе могут возникнуть проблемы с "бинар-
ностью" GIF-рисунка). Теперь можно использовать этот сценарий даже в таком кон-
тексте:
... какой-то текст страницы ...
... продолжение страницы ...
В результате таких действий в нашу страницу будет подставляться каждый раз слу-
чайное изображение, генерируемое сценарием. Разумеется, чтобы избежать неприят-
ностей с кэшированием, которое особенно интенсивно применяется браузерами по
отношению к картинкам, мы должны его запретить выводом соответствующего заго-
ловка. Именно так устроены графические счетчики, столь распространенные в Ин-
тернете.
Еще раз обращаю ваше внимание на такой момент: CGI-сценарии могут
использоваться
не только для вывода HTML-информации, но и для любого другого ее типа — начиная
с
графики и заканчивая звуковыми MIDI-файлами. Тип документа задается в
единственном
месте — заголовке Content-type. Не забывайте добавлять этот заголовок, в
против-
ном случае пользователю будет отображена стандартная страница сервера с сообще-
нием о 500-й ошибке (для сервера Apache), из которой он вряд ли что поймет.
Часть I. Основы Web-программирования 48
Передача информации
CGI-сценарию
Проблема приема параметров, заданных пользователем (с точки зрения сценария —
все равно, через форму или вручную), несколько сложнее. Мы уже частично
затраги-
вали ее и знаем, что основная информация приходит через заголовки, а также (при
использовании метода POST) после всех заголовков. Рассмотрим эти вопросы под-
робнее.
Переменные окружения
Непосредственно перед запуском сценария сервер передает ему некие переменные
окружения с информацией. В определенных переменных содержатся некоторые заго-
ловки, но, как уже говорилось, не все (получить все заголовки нельзя). Вот
список
наиболее важных переменных окружения (большинство из них мы уже рассматрива-
ли, но сейчас будет полезно повториться и систематизировать весь наш список
имен-
но с точки зрения программиста).
HTTP_ACCEPT
В этой переменной перечислены все (во всяком случае, так говорится в документа-
ции) MIME-типы данных, которые могут быть восприняты браузером. Как мы уже
замечали, современные браузеры частенько ленятся и передают строку */*, что
озна-
чает, что они якобы понимают любой тип.
HTTP_REFERER
Задает имя документа, в котором находится форма, запустившая CGI-сценарий. Эту
переменную окружения можно задействовать, например, для того, чтобы отслеживать
перемещение пользователя по вашему сайту (а потом, например, где-нибудь
распеча-
тывать статистику самых популярных маршрутов).
HTTP_USER_AGENT
Идентифицирует браузер пользователя. Если в данной переменной окружения при-
сутствует подстрока MSIE, то это — Internet Explorer, в противном случае, если
в на-
личии лишь слово Mozilla, — Netscape.
HTTP_HOST
Доменное имя Web-сервера, на котором запустился сценарий. Эту переменную окру-
жения довольно удобно использовать, например, для генерации полного пути, кото-
рый требуется в заголовке Location, чтобы не привязываться к конкретному
серверу
Глава 3. CGI изнутри 49
(вообще говоря, чем меньше сценарий задействует "зашитую" в него информацию об
имени сервера, на котором он запущен, тем лучше — в идеале ее не должно быть
во-
все).
SERVER_PORT
Порт сервера (обычно 80), к которому обратился браузер пользователя. Также
может
привлекаться для генерации параметра заголовка Location.
REMOTE_ADDR
Эта переменная окружения задает IP-адрес (или доменное имя) узла
|
|