CGI
Пару слов от автора
Что меня заставило взятся за этот нелегкий труд написания данного учебного
пособия. Ну во первых то что практически НЕТ ничего по CGI-програмированию
на русском языке, а большинству тех,кто хотел бы изучить CGI, документация
на английском в отличии от тех немногих типа меня практически недоступна
для понимания.Чтоб помочь им преодолеть этот в первую очередь языковый
барьер я и сел писать эту книгу...
Еще причина ,отчасти перекликающаяся с первой, это то что когда говорят
об интернет-программировании обычно излагают HTML со всеми тэгами, которые
всем уже по ночам в кошмарах снятся ,ну а после чего начинают долго
охать и ахать над прелестями нового аппаратно и платформо-независимого,переносимого,безопасного.....и.т.д.
языка Java.Иногда в еще и могут тонким краешком затронуть JavaScript.Видя
эту не побоюсь этого слова безнадежную ситуацию, я как доблестный CGI-программист
решил хоть что-то поправить к лучшему. Если у меня это хоть немного
удалось, то напишите мне.
Если также у вас есть какие-то вопросы -тоже пишите, я с радостью постараюсь
ответить на них всех.
Леша.
paaa@uic.nnov.ru
http://www.uic.nnov.ru/~paaa/cgi-bin/contact.cgi
Краткое лирическое отступление насчет CGI
Итак что такое CGI- скрипты и вообще подобные вещи. Начнем с того что
ваш браузер (когда вы набрали URL) соединяется по протоколу HTTP с указаным
сервером и просит у него нужный файл,примерно так:
GET /~paaa/cgi-bin/guestbbok.cgi HTTP/1.0
Вот это самое главное в запросе
Ну тут дальше идет посылаемая браузером информация о себе и о том что
более подробно ему надо.(Например Accept: */*)
Ну и если запрошен простой файл например .html то если если такой файл
есть, То сервер отошлет браузеру ответ:
HTTP/1.0 200 Okay
Content-Type: text/html
<HTML>
<BODY>
.......
</BODY></HTML>
В ответе , состоящем из зоголовка и тела, в заголовке содержится код
возврата и информация о типе содержимого. Далее после пустой строки
(она нужна чтоб отделить заголовок от тела) идет информация из самого
документа , по заданому URL <HTML><BODY>...
Вот в принципе и весь WWW ....ходишь от ссылки к ссылке....
А что если Нужно внести в этот унылый процесс что-нибудь по настоящему
интерактивное , динамическое,прекрасное и великолепное....? Чтож есть
ответ и на этот вопрос. Просто что если в запрашиваемом URL указать
специальную программу (CGI,программа Common Gateway Inteface - Общего
Шлюзового Интерфейса) и то что эта прога выдаст то и отправиться браузеру....Сервер
запускает .cgi программу и она например обработав данные формы заносит
вас куда-нибудь в свою базу данных,а вам сообщит что вы большой молодец
:)
Ну надеюсь я вас заинтриговал......?
Итак ...приступим...
Краткие сведения о том что надо знать чтоб писать CGI скрипты:
Ну вопервых надо знать что такое интернет и как он работает (а вы знаете?
;))) ) Ну и чуть-чуть умения програмировать(это самое главное)
На кого ориентировано данное учебное пособие -спросите вы ? Ну в принципе
на достаточно широкую аудиторию тех, кто занимается Интернет-программированием
и кто хотел бы освоить премудрости интерфейса CGI. Данная книга будет
весьма полезна для web-дизайнеров, системных администраторов интернет-серверов,
программистов и для простых пользователей интернет, которые хотели бы
сделать свой сайт по-настоящему достойным называться хорошим сайтом.
Так как интернет в основном строится на операционной системе UNIX ,
то изложеный сдесь материал может быть без особых модификаций реализован
на практически любой UNIX-системе.
Кроме того, я также делаю предположение , что ваш web-сервер поддерживает
интерфейс CGI и для вас эта поддержка включена. (на "халявных"
серверах администраторы отключают CGI и SSI для пользовательских директорий
- просто это такая политика - предоставлять только ОЧЕНЬ МИНИМАЛЬНЫЙ
сервис.) Так что если вы хотите изучать CGI то вам нужет нормальный
,полнофункциональный сервер. Если же вы сами являетесь системным администратором
на своем сервере , то для вас, естественно нет проблем, ведь включить
CGI для какой-нибудь директории - это просто подправить одну строчку
в файле конфигурации сервера.
Замечание:
Если же вы используете Windows NT ,то материал данной книги вам будет
тоже очень полезен, однако будьте готовы к тому что в некоторые скрипты
придется вносить значительные изменения. В некоторых случаях,когда сказывается
то , что возможности NT по работе с сетью намного хуже, чем у UNIX,то
некоторые скрипты вовсе нельзя будет использовать.
Давайте вместе писанем какой нибудь простенький скриптик а потом я
вам расскажу где сдесь собака порылась....
Ну сначала в своем домашнем каталоге создайте директорию cgi-bin:
cd public_html
mkdir cgi-bin
chmod 0777 cgi-bin
Последняя строчка будет очень важна.
Возьмите редактор и наберите:
#!/usr/bin/perl
#first.cgi
print "Content-Type: text/html\n\n";
print "<HTML><BODY>";
print "<H1>Hello you!!!</H1>";
print "</BODY></HTML>";
Сохраните его в директории cgi-bin под именем first.cgi .Ну как сохранили?
А теперь сделайте его исполняемым(ведь это программа):
chmod +x first.cgi
Ну вот,подходим к торжественному моменту.... наберите в строке браузера
http://www.ваш.сервер.ru/~ваш_логин/cgi-bin/first.cgi
и посмотрите чо будет. Будет одно из двух ,либо скрипт заработает и
вы увидите сгенерированую им страничку (поздравляю,в нашем полку прибыло!)
либо Internal Server Error -тогда не расстраивайтесь,вы что-то сделали
не так.
Вам тогда пригодится пособие по ловле блох.
Ну вопервых проверку синтаксиса можно осуществить следующим образом:
perl -с first.cgi
Perl вам сразу выдаст либо сообщения об ошибках(ну бывает,точку с запятой
пропустили, скобочки или кавычки забыли закрыть...) это сразу по ходу
дела поправимо.
Более грубая с логической точки зрения это пропустить вывод пустой строки,
которая отделяет заголовок от тела:
print "Content-Type: text/html\n\n"; #Все Правильно
print "Content-Type: text/html\n"; #ОШИБКА!!!
Разберем скрипт:
Первая строка #!/usr/bin/perl Просто указывает где в системе расположен
компилятор Perl. Обычно он находится /usr/bin/perl или /usr/local/bin/perl
,выяснить это можно одной из комманд which perl или whereis perl ну
или (что очень долго) запустить полный поиск find / -name perl -print.
Вторая строка это просто коментарий -вы можете тыкать чо угодно после
знака #, однако я пишу обычно во второй строке название скрипта, что
очень удобно.
Затем идет print "Content-Type: text/html\n\n"; Это заголовок
указывающий тип содержимого.
Все что скрипт печатает в свой стандартный вывод STDOUT идет на обработку
к серверу. Пустая строка отделяет заголовок от тела,которое в нашем
случае представляет собой
<HTML><BODY>
<H1>Hello you!!!</H1>
</BODY></HTML>
Сервер обработает ответ скрипта и на базе него сформирует и пошлет браузеру
ответ.(Сервер обычно не изменяет тела сообщения,он только дополняет
заголовок нужными для работы протокола HTTP полями)
Ну вот азы уже освоены,все не так трудно и удручающе как могло показаться
на первый раз
Вы теперь можете сами потренироваться в написании таких вот простеньких
скриптов чтоб набить руку.
Леша ( paaa@uic.nnov.ru
)
|