Web-mastering: портал вебмастеров (web-мастеров) о web-дизайне, web-программировании, раскрутке; статьи по веб-дизайну, веб-программированию для вебмастеров

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

Часть 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 порой сильно перегружает страницы.

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

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

Ну ладно, 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 и пишем в ней:

<html>
<head>
<title>Наш первый cgi скрипт</title>
</head>
<body>
<form method=POST action=cgi-bin/first.cgi>
Имя:<input type=text name=name><br>
Возраст:<input type=text name=age size=5>
<input type=submit>
</form>
</body>
</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 "<HTML>\n"; print "<BODY>\n"; print "Вы успешно ввели данные. Спасибо.\n"; print "</HTML>\n"; print "</BODY>\n";

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

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

exit;

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

sub error {
my($string) = $_[0];
print "Content-Type: text/html\n\n";
print "<HTML>\n";
print "<BODY>\n";
print "Ошибка: $string .\n";
print "</BODY>\n";
print "</HTML>\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

Источник: http://des.tora.ru

Назад

[an error occurred while processing this directive]

© 2006-2008 Web-mastering.net - "Портал вебмастеров"