Шаг 27 - Некоторые ответы

У многих возникают по началу достаточно много естественных вопросов. Привожу конкретное письмо, думаю ответ будет интересен многим.

Здравствуйте! Пишу вам почти отчаившись создать что-то работающее для web
странички на perl. Перечитал сотни страниц доков, FAQ, пособий и.т.д. но
ничего не помогает.
Все предложенные варианты, программы не работают. Все грузят про CGI.pm а я
не пойму как с ним работать. Уже десять дней ломаю голову как сделать
рабочую web-программу (которая могла бы работать дома без сервера интернет и
на виндах).
Объясните пожалуйста как можно сделать самую примитивную гостевую книгу.
Чтобы из текстовой формы браузера, введенная информация пересылалась на
сервер и записывалась в htm вайл? Что для этого нужно, писать файл *.cgi или
*.pl. Можно ли сделать так, чтобы гостевая книга работала у себя дома на
компе и без интернет сервера. Как избежать у себя на PC сообщения брайзера
сохранить ли *.pl или открыть его на месте.
(комп с WINDOWS 98). Извините за такое количество вопросов,
я буду Вам очень благодарен если Вы ответите хотя бы на некоторые из них.

С уважением, Артем.

Во-первых прекрасно, что ломание головы происходит только 10 дней :-) Во-вторых, все видимо связано с неправильным пониманием механизма всего происходящего.

Для начала надо понять, что CGI это интерфейс работы браузера и веб-сервера. Поэтому очевиден первый ответ: без веб-сервера (или в терминах этого письма - сервера интернет) ничего и никогда работать не будет. И по этой причине главным условием работы этого механизма является правильно настроенный на работу веб-сервер и браузер.

Механизм CGI предназначен для работы веб-сервера и внешних программ обработчиков. Это значит просто то, что все возможности в веб-сервер встроить нельзя поэтому ему просто необходимо запускать внешние программы. Понятное дело веб-сервер также не знает на каком диалекте умеет "разговаривать" эта программа, чтобы сообщать и получать данные. Для ликвидирования такой неразберихи был разработан простой общий интерфейс взаимодействия CGI.

Теперь когда есть грамотный сервер и интерфейс можно копаться во внешней программе. Очень важное и лучшее, я считаю, свойство CGI это то, что внешняя программа может быть написана на ЛЮБОМ языке программирования.

Предположим у нас имеется программа написанная на каком-то языке. Прежде всего ее надо сделать запускаемой, т.е. скомпилировать. Если это скриптовая программа, на языке Перл к примеру, то надо обеспечить правильную настройку интерпретатора и настройку веб-сервера. Какое имя дать *.cgi или *.pl будет зависеть только от того, как Вы настроите сервер. Если он будет знать, что все файлы с именами *.pl являются скриптами Перл, то для обработки запроса будет запускать интерпретатор. Здесь есть еще тот факт, что операционные системы тоже все разные. Если в системе Юникс можно установить на файл атрибут "запускаемый", то в системах Виндовс такое различие происходит только по имени файла, поэтому файлы с расширениями отличными от EXE система никогда просто так не запустит. В этом случае необходимо вмешательство веб-сервера, который должен четко знать, что делать со всеми используемыми файлами.

В случае если веб-серверу неизвестно ничего о типе файла (или о том, что его надо запускать) он попросту предлагает скачать содержимое этого файла браузеру, от того и появляется окно с предложением закачки. А уж если без веб-сервера, то браузер тем более сможет лишь только скачать файл, потому что он неумеет ничего запускать (из соображений безопасности).

Решением всех проблем будет правильная настройка на своем компьютере веб-сервера и интерпретатора. Для того, чтобы не подключаться к интернету надо просто лишь вызывать http://127.0.0.1/ или http://localhost/ тогда браузер не будет лезть в инет, а будет работать на локальном компьютере. А как Вы думали ?! Можно ли без локальной отладки пускать программу в суровый мир сети ?! Конечно нельзя.

Еще на последок хочу отметить, что CGI.pm это достаточно важный модуль для разработки приложений. Если Вы читали все шаги из данного раздела, то Вам не надо объяснять, что работа интерфейса достаточна сложна и не всегда интересно ее реализовывать каждый раз в новой программе. Для упрощения программирования как раз и был создан этот модуль под Перл. Мы же с Вами создавали класс CGIApp для С++ и тем самым тоже несколько облегчили свою жизнь. Читайте прошлые шаги.

Вобщем-то теперь думаю написать гостевую книгу будет намного проще :-) Потом мы уже пробовали это однажды делать и тут вопросов не должно быть. Если Вам слишком сложно писать на Перле, то пишите на Паскале или С++. Весь обмен прост и происходит через обычные функции read и write, т.е. через стандартные потоки ввода/вывода.


Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Кузин Андрей - 2.09.2000