НЕКОТОРАЯ ИНФОРМАЦИЯ О CGI

Автор: manager Четверг, Март 20th, 2008 Нет комментариев

Рубрика: Интернет

Часть 1. CGI-скрипты.

Начнем с CGI. CGI (Common Gateway Interface) — это не язык на котором пишут скрипты, это интерфейс через который эти самые скрипты запускаются. Такие неотъемлемые аттрибуты домашних страничек и больших сайтов как счетчик посещений, почтовая форма, гостевая книга, WEB — конференция, иногда Чат — это все CGI — скрипты.

Эти скрипты пишутся в основном на языке Перл (Perl), он является наиболее удобным, т.к. не нуждается в компиляции, а для его исполнения нужны всего лишь интерпретатор языка Перл и более «сложная» часть — директория, в которой эти скрипты разрешено выполнять. На популярных бесплатных серверах такой директории нет :( ( Из известных мне бесплатных серверов с поддержкой скриптов самыми лучшими, на мой взгляд, являются:

http://www.lgg.ru/ — российский сервер.

http://www.hypermart.net/ — не российский сервер ;-)

Но Вы скажете: зачем мне эти мучения с установкой скриптов, сделаю скрипт на бесплатном сервере, таком как GuestBook.ru или подобном. Я отвечу: делайте, если Вас прикалывает зависимость Вашего сайта от этих серверов, и их многочисленная реклама.

Вы опять скажете: много функций CGI можно реализовать на Java/JavaScript, и никакого каталога для скриптов не надо. Я опять отвечу: много — это не все! CGI не зависит от версии броузера, т.к. выполняется на сервере, а Java зависит, в броузере нельзя отключить выполнение CGI, Java порой сильно перегружает страницы.

Я не знаю Перл, скажете Вы. Не беда, отвечу я. Любой скрипт можно скачать в Интернете.

Вот краткий список ресурсов:

http://kazwebclub.newmail.ru/

http://www.lgg.ru/~cgi/

http://www.cgi-resources.com/

http://www.scripsearch.com/

http://www.worldwidemart.com/scripts/

http://www.script.ru/

Ну ладно, cgi-bin директория у меня есть, скрипт тоже, а как его теперь установить на сервер? Сначала откройте файл с расширением pl или cgi в текстовом редакторе, в первой строке укажите путь к Перлу на диске, этот путь можно узнать у администратора, чаще всего это /usr/local/bin/perl/ или просто /usr/bin/perl/, потом исправьте скрипт так, как написано в README к нему. Закачайте скрипт на сервер в ASCII, не закачивайте скрипты в BINARY, иначе они не будут выполняться! Потом для скрипта нужно установить права доступа для выполнения, это можно сделать командой CHMOD 755, если скрипт записывает какие-то данные в файл, этому файлу нужно установить права доступа CHMOD 777. ВОТ И ВСЕ!!! СКРИПТЫ ДОЛЖНЫ РАБОТАТЬ.

Часть 2. Установка cgi-скрипта.

Я решил коснуться этой темы по той причине, что очень многие веб-мастера не могут установить перл скрипт. Я расскажу, как установить лишь в принципе, а не подробно, расскажу лишь об основных аспектах этого дела. Я расскажу только о том как устанавливать скрипт в системе Unix, так как только с ним имел дело.

Первое, что мы сделаем — это запустим команду which perl или whereis perl (учтите, что некоторые сервера не поддерживают эти две команды). Если вы имеете удаленный доступ, то просто спросите у веб-мастера. Теперь, когда мы знаем, где находится perl(чаще всего: /usr/bin/perl или /usr/local/bin/perl), то первую строку скрипта, мы заменяем на путь к перлу.

Второе, устанавливаем переменные. В основном есть четыре разные переменные. Это url в интернете, путь на локальном компьютере, дата, программа sendmail. Команда даты находится, в основном, в /bin/date. Sendmail находится, во многих случаях, в каталоге. URL, вы надеюсь, сможете поставить, а вот путь к корневой директории на локальном компьютере может быть — /home/user/public_html или home/users/user/public_html. Лучше узнайте у администратора сервера. Поскольку описывать это пункт в установке скрипта очень долго или почти невозможно (так как случаев может быть очень много), то я не буду касаться слишком подробно этого момента. Читайте readme.txt и все поймете.

Третье, мы закачиваем файлы в тот(те) каталог(и), о котором(ых) написано в readme или в тот каталог, который является значением какой-то переменной. Еще один момент — иногда скрипты для надежности запускаются только в cgi-bin директории, поэтому учитывайте это обстоятельство(так как в других директориях они просто не запустятся). И еще, не забывайте, если вы работаете с FTP доступом, что скрипты надо перекачивать в ASCII mode.

Четвертое — устанавливаем права доступа или, как это по другому называется, вызываем команду chmod. Синтаксис: chmod xxx file, где x — число 1-7, file — файл или директория, который(ую) мы подвергаем этой команде. Чаще всего xxx для скриптов имеет значение 755, для файлов или директорий, которые доступны для записи — 777 или 766, если не разрешается доступ туда пользователю, 644 и другие. Но основные цифры для установки, я привел выше. В общем, это опять же написано в readme.

Часть 3. Наш первый cgi скрипт

Подготовка:
Создаем страницу first.html и пишем в ней:

Имя:
Возраст:

Где переменная action в теге form равна будет пути к файлу first.cgi, который мы сейчас напишем. Также создаем пустой файл result.txt, в котором будут храниться данные, заполненные посетителями. Теперь разберемся с файлов first.cgi. Открываем NotePad и начинаем писать:

#!/usr/bin/perl

Первая строчка показывает, где находится перл. В данном случае он находится по адресу /usr/bin/perl.

read(STDIN, $buffer, $ENV{‘CONTENT_LENGTH’});
@pairs = split(/&/, $buffer);
foreach $pair (@pairs) {
($name, $value) = split(/=/, $pair);
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack(«C», hex($1))/eg;
$value =~ s///g;
$value =~ s/]|\n)*>//g;
$FORM{$name} = $value;
}

Этот код преобразует данные, переданные методом POST в формат $FORM{‘переменная’} = «значение»;. То есть если у вас на странице в форме написано , то переменная $FORM{‘age’} будет равна 14.

$temp=$ENV{‘QUERY_STRING’};
@pairs=split(/&/,$temp);
foreach $item(@pairs) {
($key,$content)=split (/=/,$item,2);
$content=~tr/+/ /;
$content=~ s/%(..)/pack(«c»,hex($1))/ge;
$FORM{$key}=$content;
}

А это код делает то же самое, что и предыдущий, но преобразует данные, переданные методом GET.

Мы также можем сделать некоторые поля обязательными для заполнения:

if ($FORM{‘age’} eq «») {&error(‘Вы не заполнили обязательные поля формы’);}

Это читается как: Если переменная $FORM{‘age’}, то есть поле с параметром name=»age», осталось незаполненным, то(заключается в фигурные скобки — {}) вызывается подпрограмма error(ее мы рассмотрим позже) c параметром, значение которого «Вы не заполнили обязательные поля формы». Такой код можно скопировать сколько угодно раз, меняя age на любую другую переменную.

Примечание:
Переменные начинаются со знака $ , массивы со знака @ , подпрограммы с & , хеши с % , а операторы заканчиваются знаком ; .

Теперь запишем все эти данные из формы в файл result.txt. Для этого откроем его:

open(RESULT,»>>result.txt»);

RESULT — это дескриптор файла, его надо писать прописными буквами. Имя файла, который надо открыть пишется в кавычках. Вы, наверное, заметили, что перед именем файла я написал >> . Это знак обозначает, что я открываю файл для добавления записи.

Примечание: Знак >> — для добавления записей. > — стирает все содержимое и записывает новые записи. Если знака нет — то файл открывается для чтения.

Не забудьте после данного оператора поставить ; .
Теперь запишем данные в файл:

foreach $value (values (%FORM)) {
print RESULT «$value|»;
}

Читаем: для каждой переменной в массиве значений хеша FORM напечатать эту переменную в файл RESULT, а после нее записать символ | Символ | мы вводим для разделения значений переменных. После этого переведем курсор на новую строку, чтобы следующая запись не была на этой же строке:

print RESULT «\n»;

Закроем файл:

close(RESULT);

Теперь выведем то, что все у нас получилось:

print «Content-Type: text/html\n\n»; print «\n»; print «\n»; print «Вы успешно ввели данные. Спасибо.\n»; print «\n»; print «\n»;

Здесь мы сначала пишем, что сейчас пойдет HTML страница (не забудьте поставить после Content-type строки \n\n ) . Потом пишем сам HTML код. Этот код легко модифицировать по аналогии.

Выходим их программы:

exit;

А теперь мы сделаем подпрограмму error:

sub error {
my($string) = $_[0];
print «Content-Type: text/html\n\n»;
print «\n»;
print «\n»;
print «Ошибка: $string .\n»;
print «\n»;
print «\n»;
}

Сначала обозначаем, что это подпрограмма(sub) и называем ее(error).Все операторы подпрограммы будут идти между двумя фигурными скобками {}. Первая строка подпрограммы(my…) обозначает, что переменная $string будет локальной для данного блока, то есть подпрограммы в данном случае и принимает значение первого параметра в массиве параметров(@_). Дальше идет почти то же самое, что и при выводе результатов работы программы, только теперь мы выводим ошибку на нашу страницу.

Сохраняем наш cgi скрипт под именем first.cgi.Подсоединяемся к нашему ftp серверу и закачиваем first.cgi и result.txt в директорию, где разрешено запускать cgi скрипты, ascii методом(поскольку это текст). Теперь установим права доступа командой chmod 755 и chmod 777(как это сделать написано выше). Перекачиваем файл first.html в директорию, где хранятся html файлы. Заходим через интернет на эту страницу(first.html), заполняем форму и нажимаем кнопку, и…

Источник: http://kazwebclub.newmail.ru

Оставить комментарий

Чтобы оставлять комментарии Вы должны быть авторизованы.

Похожие посты