Программы CGI

"Пилите гири, Шура! Они золотые..."

Перспектива написания программ CGI может испугать даже самых отважных Web-мастеров, но это настолько полезное средство, что его невозможно проигнорировать. Ваши сайты без CGI-программ - это все равно, что работать в Photoshop'e без мышки. Программы CGI не только помогут Вам собрать данные из форм, подсчитать число посетителей, провести опросы на Вашем сайте, организовать форум, доску объявлений, гостевую книгу, но и просто вдохнут жизнь в Ваш Web-узел, сделав его динамичным, интерактивным.

В данной статье я не буду объяснять основы программирования CGI-скриптов. Я хочу лишь помочь начинающим Web-строителям уяснить основные понятия, на конкретном примере рассказать об установке и запуске CGI-программы на сервере Вашего провайдера или на сервере, который предоставляет свободное место и возможность использования CGI для Ваших страничек.

Итак, начнем по порядку. CGI - не язык программирования, это стандарт взаимодействия Web-сервера с Вашими программами. Программы CGI бывают в двух видах: откомпилированные двоичные программы (в данной статье не рассматриваются) и в виде сценариев (скрипты). CGI-скрипты можно писать на различных языках. Самым популярным да и самым удобным является Perl. Вот тут все и начинается... Многие думают, что надо изучить новый язык программирования, и решают не тревожить и так нелегкую жизнь. Но не бойтесь: изучение Perl не будет Вам в тягость. Хотя Вы можете и не писать собственные CGI-скрипты и учить новые языки программирования (со временем Вы поймете, что лучше все это знать): достаточно уметь пользоваться уже написанным (в Интернете многие сайты бесплатно распространяют CGI-программы и скрипты), а это не так сложно:).

Думаю, теории достаточно, перейдем к практике. Я Вас убедил и Вы решили, что должны использовать на своей страничке CGI. Ваши действия:

 
  1. Вы скачиваете, к примеру, с сайта www.script.ru необходимый Вам скрипт.
  2. Теперь Вам необходимо правильно его настроить под себя, для этого можно воспользоваться текстовым редактором, который не сохраняет свои параметры в редактируемом файле. Все комментарии по настройке обычно всегда прилагаются вместе со скриптом. Но я хочу обратить Ваше внимание на то, что обычно все пути в CGI-скриптах должны быть установлены относительно той директории, где хранятся сами скрипты. Это значит, что если Ваши CGI-скрипты хранятся в директории cgi-bin, а Ваши документы - в директории docs, то надо не забыть написать в пути, что надо выйти из директории cgi-bin: "../", а затем войти в директорию docs: "docs/", в итоге получается: "../docs/". Это очень важный момент. Многие допускают ошибки при написании правильного пути, но Вы теперь, я надеюсь, таких ошибок не допустите.
  3. Скрипт, модифицированный под Ваши условия, Вы должны закачать к себе на сервер в папку cgi-bin. Но, внимание! В конце строк Вашего скрипта изначально стоит символ LF, а не CRLF или CR, поэтому закачивать скрипт на сервер надо в текстовом режиме (ASCII), но ни в коем случае не в двоичном (только если Ваш сервер не под UNIX).
  4. Вы должны установить права доступа на CGI-скрипт. О них пишут в комментариях к конкретному скрипту. Обычно эти права ставят такими, чтобы обычный пользователь их мог исполнять. Это можно сделать при помощи команды chmod 755 в Вашем FTP-клиенте.

Вот и вся практика. Правда, не сложно? На врезке смотрите пример небольшого CGI-скрипта, благодаря которому Вы сможете обрабатывать данные из форм, которые заполняют, к примеру, Ваши посетители. Если Вам будет что-то не понятно, то это естественно, так оно сначала и должно быть:)

Вот и вся программа, почти "Hello, World", а Вы боялись. Теперь, следуя вышеуказанным инструкциям по установке, Вы положите начало новой жизни Вашего сайта. Я не стал усложнять этот скрипт. Он лишь должен послужить Вам шаблоном. Вы можете проявить свою фантазию по составлению письма и обработке данных. Надеюсь, мне удалось убедить Вас в силе CGI-скриптов. Удачи в изучении Perl и CGI!

Александр ЖДАНОВ AKA Лёсик,
www.lyos.da.ru,
lyos@mail.ru

#!/usr/local/bin/perl # Путь, где расположен Perl. Обычно
# он там и расположен, но лучше узнать у провайдера
$mailprog = '/bin/sendmail'; # Название почтовой программы
# на Вашем сервере. Менять, я думаю, путь не стоит, т.к.
# он, в основном, стандартный
$youmail = 'you@server.com'; # Ваш почтовый адрес. На него
# придут данные из формы
# Если Вы не уверены в своих знаниях, то дальше, когда
# будете набирать этот скрипт, ничего не меняйте
# У нас на входе скрипта данные формы, закодированные
# методом urlencode, подаваемые на STDIN. Мы должны,
# во-первых,их получить, что и делаем. Эти данные у нас
# теперь в переменной $namevalues
read(STDIN, $namevalues, $ENV{'CONTENT_LENGTH'});
# Запускаем почтовую программу
open (MAIL, "|$mailprog $youmail") || die "Не могу открыть $mailprog!\n";
# Печатаем поля заголовков почтового сообщения
print MAIL ("To: $youmail\n");
print MAIL ("From: От посетителя\n");
print MAIL ("Subject: Тема сообщения\n\n");
# Каждый пункт формы имеет тег <NAME>. Когда наша
# программа получает данные, они записываются в строки
# NAME=VALUE, разделенные знаком '&'. NAME - это имя,
# которое Вы дали полю, а VALUE - значение, введенное
# пользователем в это поле. Символом '&' используем
# в качестве разделителя функции split
@namevalues = split(/&/, $namevalues);
# декодируем каждое поле, организовав цикл foreach по
# полученным полям @namevalues
foreach $namevalue (@namevalues) {
 ($name, $value) = split(/=/, $namevalue);
 $name =~ tr/+/ /;
 $value =~ tr/+/ /;
# преобразуем шестнадцатеричные числа в буквы и цифры
 $name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
 $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
# получаем набор пар name-value
 $INPUT{$name} = $value;
# передаем все данные почтовой программе
 unless ($value eq "") { print MAIL ("$name: $value\n"); } }
# Письмо с данными из формы Вам составлено. Ждите...:)
close (MAIL);
# Выведем страничку пользователю о том, что он успешно
# отправил данные
print ("Content-Type: text/html\n\n");
print ("<html><head><title>Большое Спасибо!</title></head>\n");
print ("<body><h1>Вы успешно отправили нам Ваши данные и все благодаря CGI</h1>\n");
print ("</body></html>\n");
exit;
Версия для печатиВерсия для печати

Номер: 

36 за 1999 год

Рубрика: 

Internet
Заметили ошибку? Выделите ее мышкой и нажмите Ctrl+Enter!