Carding 4 Carders
Professional
- Messages
- 2,729
- Reaction score
- 1,521
- Points
- 113

В статье «Как работают веб-страницы» обсуждаются основные функции HTML и показано, как создавать веб-страницы, содержащие текст и графику. Он также показывает вам, как разместить вашу страницу «в эфире» с помощью хостинга. Один из вопросов, который часто задают новые дизайнеры веб-сайтов после создания своего сайта: «Что такое CGI Scripting и как я могу использовать его на своем сайте?» или "Как мне создать интерактивные формы на моем сайте?"
В этой статье мы ответим на ваши вопросы о сценариях CGI и покажем, как создавать свои собственные сценарии. В процессе вы также узнаете немного о веб-серверах. Давайте начнем!
Веб-серверы

Как описано в статье Как работают веб-серверы, веб-серверы могут быть довольно простыми. По сути, веб-серверы просто извлекают файл с диска и отправляют его по сети запрашивающему браузеру. Допустим, вы вводите URL-адрес bygpub.com/books/tg2rw/author.htm. Сервер получает запрос на файл /books/tg2rw/author.htm. Если вы посмотрите на следующий рисунок, вы увидите, как сервер разрешает этот запрос:
Во время установки веб-серверу было дано указание понять, что c: \ My Documents \ www является корневым каталогом сервера. Затем он ищет /books/tg2rw/author.htm в этом корне. Когда вы запрашиваете URL-адрес bygpub.com/books/tg2rw/, сервер понимает, что вы ищете файл по умолчанию для этого каталога. Он ищет несколько разных имен файлов, чтобы попытаться найти файл по умолчанию: index.html, index.htm, default.html, default.htm. В зависимости от сервера он может искать и другие. Таким образом, сервер превращает [URL bygpub.com/books/tg2rw/ в bygpub.com/books/tg2rw/index.htm и доставляет этот файл. Все остальные файлы должны быть указаны путем явного именования файлов.
Так все веб-серверы обрабатывают статические файлы. Большинство веб-серверов также обрабатывают динамические файлы - через механизм, называемый Common Gateway Interface, или CGI. Вы видели CGI в самых разных местах сети, хотя, возможно, не знали об этом в то время. Например:
- Любая гостевая книга позволяет вам ввести сообщение в форме HTML, а затем, при следующем просмотре гостевой книги, страница будет содержать вашу новую запись.
- Форма WHOIS в Network Solutions позволяет вам ввести доменное имя в форму, и возвращаемая страница будет отличаться в зависимости от введенного имени домена.
- Любая поисковая система позволяет вам вводить ключевые слова в HTML-форму, а затем динамически создает страницу на основе введенных вами ключевых слов.
Механизм CGI
На большинстве веб-серверов механизм CGI стандартизирован следующим образом. В обычном дереве каталогов, которое сервер считает корневым, вы создаете подкаталог с именем cgi-bin. (Вы можете увидеть этот каталог на рисунке на предыдущей странице.) Затем сервер понимает, что любой файл, запрашиваемый из специального каталога cgi-bin, не должен просто считываться и отправляться, а должен выполняться. Результат выполненной программы - это то, что она фактически отправила браузеру, запросившему страницу. Исполняемый файл обычно представляет собой либо чистый исполняемый файл, например, вывод компилятора C, либо сценарий PERL. PERL - чрезвычайно популярный язык для написания сценариев CGI.Представьте, что вы вводите следующий URL-адрес в свой браузер: carder.market/search/. Сервер распознал, что /search/ находится в каталоге cgi-bin, поэтому он выполняет search (который является сценарием PERL) и отправляет результат выполнения в ваш браузер.
Вы можете написать свои собственные сценарии и попробовать CGI самостоятельно при условии, что:
- Вы знаете такой язык программирования, как C или PERL.
- У вас есть доступ к веб-серверу, который обрабатывает сценарии CGI. Если вы заплатили службе веб-хостинга за размещение своего веб-сайта, то, скорее всего, у вас есть доступ к сценариям CGI через ваш хост. За подробностями обращайтесь к службе хостинга. Если нет, то вы можете поэкспериментировать, установив веб-сервер на домашнем компьютере и научившись его использовать. Второй вариант немного сложнее, но вы гарантированно многому научитесь в процессе!
Простые сценарии CGI
Предполагая, что у вас есть доступ к каталогу cgi-bin (см. Предыдущий раздел), и предполагая, что вы знаете либо язык программирования C, либо PERL, вы можете провести целый ряд интересных экспериментов с CGI, чтобы получить удовольствие. Начнем с создания простейшего сценария CGI.В статье «Как работают веб-страницы» мы рассмотрели простейшую веб-страницу в формате HTML. Выглядело это примерно так:
Code:
<html>
<body>
<h1> Здравствуйте!</h1>
</body>
</html>
Простейший возможный сценарий CGI после выполнения создавал бы эту простую статическую страницу в качестве своего вывода. Вот как выглядела бы эта CGI-программа, если бы вы написали ее на C:
Code:
#include <stdio.h>
int main()
{
printf("Content-type: text/html\n\n");
printf("<html>\n");
printf("<body>\n");
printf("<h1>Hello there!</h1>\n");
printf("</body>\n");
printf("</html>\n");
return 0;
}
На своем веб-сервере я ввел эту программу в файл simplest.c, а затем скомпилировал ее, сказав:
Code:
gcc simplest.c -o simplest.cgi
Поместив simplest.cgi в каталог cgi-bin, его можно запустить. Как видите, все, что делает скрипт, - это генерирует страницу с надписью «Привет!» Единственная неожиданная часть - это строка, в которой говорится:
Code:
printf("Content-type: text/html\n\n");
Вы можете сделать то же самое в PERL. Введите этот код PERL в файл с именем simplest.pl:
Code:
#! /usr/bin/perl
print "Content-type: text/html\n\n";
print "<html><body><h1>Hello World!";
print "</h1></body></html>\n";
Поместите файл в каталог cgi-bin. На машине UNIX может также помочь набрать:
Code:
chmod 755 simplest.pl
Вы только что ознакомились с основной идеей создания сценариев CGI. Это действительно так просто! Программа запускается, и ее выходные данные отправляются в браузер, который вызвал сценарий. Нормальный вывод, отправляемый на стандартный вывод, - это то, что отправляется в браузер.
Однако весь смысл сценариев CGI заключается в создании динамического контента - каждый раз, когда сценарий выполняется, результат должен быть другим. В конце концов, если результат каждый раз при запуске сценария один и тот же, то с таким же успехом можно использовать статическую страницу. Следующая программа на C демонстрирует очень простой динамический контент:
Code:
#include <stdio.h>
int incrementcount()
{
FILE *f;
int i;
f=fopen("count.txt", "r+");
if (!f)
{
sleep(1);
f=fopen("count.txt", "r+");
if (!f)
return -1;
}
fscanf(f, "%d", &i);
i++;
fseek(f,0,SEEK_SET);
fprintf(f, "%d", i);
fclose(f);
return i;
}
int main()
{
printf("Content-type: text/html\n\n");
printf("<html>\n");
printf("<body>\n");
printf("<h1>The current count is: ")
printf("%d</h1>\n", incrementcount());
printf("</body>\n");
printf("</html>\n");
return 0;
}
В текстовом редакторе введите эту программу в файл с именем count.c. Скомпилируйте его, набрав:
Code:
gcc count.c -o count.cgi
Count.txt файл содержит текущее значение счетчика, и немного incrementcount () функция является функцией , которая увеличивает счетчик в count.txt файле. Эта функция открывает файл count.txt, считывает из него число, увеличивает число и записывает его обратно в файл. Функция фактически пытается открыть файл дважды. Это происходит на тот случай, если два человека попытаются получить доступ к файлу одновременно. Это, конечно, не надежный метод, но для чего-то настолько простого он работает. Если файл не может быть открыт со второй попытки, вызывающей стороне возвращается значение ошибки -1. Более сложная программа распознала бы возвращаемое значение -1 и сгенерировала бы соответствующее сообщение об ошибке.
Формы: отправка ввода
Мы увидели, что создавать сценарии CGI довольно просто. Веб-сервер выполняет любой исполняемый файл, помещенный в каталог cgi-bin, и любой вывод, который исполняемый файл отправляет на stdout, появляется в браузере, который вызвал сценарий. Теперь нам нужен способ отправки ввода в сценарий. Обычный способ отправки ввода - использовать HTML- форму.Вы видите формы по всему Интернету. Любая страница, на которой вы могли что-то ввести, является формой. Вы видите их в поисковых системах, гостевых книгах, анкетах и т.д. Домашняя страница HowStuffWorks.com содержит как минимум две мини-формы, одну для "Как вы сюда попали?" боковая панель и одна для боковой панели предложений (да, одна страница HTML может содержать несколько форм). Вы создаете форму на своей HTML-странице, и в HTML-тегах для формы вы указываете имя CGI-сценария, который будет вызываться, когда пользователь нажимает кнопку «Отправить» в форме. Значения, которые пользователь вводит в форму, упаковываются и отправляются в сценарий, который затем может использовать их любым способом.
На самом деле вы постоянно видели подобные вещи и, возможно, не знали, что это происходит. Например, перейдите на http://www.lycos.com, введите слово «test» в поле «Search for:» и нажмите «Go Get It!». кнопка. URL-адрес страницы результатов будет выглядеть так:
Code:
http://www.lycos.com/cgi-bin/pursuit?matchmode=and&cat=lycos&query=test&x=10&y=9
Вы можете видеть, что домашняя страница Lycos - это форма. У Lycos есть сценарий в каталоге cgi-bin под названием преследование. Форма отправляет скрипту пять параметров:
- matchmode=and
- cat=lycos
- query=test
- x=10
- y=9
Давайте создадим простую форму, чтобы попробовать это. Создайте файл с именем simpleform.htm и введите в него следующий HTML- код:
Code:
<html>
<body>
<h1>A super-simple form<h1>
<FORM METHOD=GET ACTION="https://www.carder.market/
cgi-bin/simpleform.cgi">
Enter Your Name:
<input name="Name" size=20 maxlength=50>
<P>
<INPUT TYPE=submit value="Submit">
<INPUT TYPE=reset value="Reset">
</FORM>
</body>
</html>
Код HTML определяет создание формы, которая использует метод GET, отправленный в сценарий CGI по адресу carder.market/cgi-bin/simpleform.cgi. Внутри формы находится область ввода текста плюс стандартные кнопки «Отправить» и «Сброс».
Файл arder.uk/cgi-bin/simpleform.cgi, на который ссылается форма, является программой на языке C. Он начал свою жизнь, когда этот фрагмент кода C был помещен в файл с именем simpleform.c:
Code:
#include <stdio.h>
#include <stdlib.h>
int main()
{
printf("Content-type: text/html\n\n");
printf("<html>\n");
printf("<body>\n");
printf("<h1>The value entered was: ")
printf("%s</h1>\n", getenv("QUERY_STRING"));
printf("</body>\n");
printf("</html>\n");
return 0;
}
Он был скомпилирован с помощью следующей команды:
Code:
gcc simpleform.c -o simpleform.cgi
Code:
The value entered was: Name=John+Smith
Из этого примера вы можете видеть, что основной процесс настройки формы и получения данных из формы в сценарий CGI довольно прост. Вот пара деталей, о которых следует помнить:
- Каждое поле ввода в форме должно иметь уникальный идентификатор.
- Форма должна использовать метод GET или POST. Преимущество метода GET заключается в том, что вы можете видеть значения формы в URL-адресе, отправленном скрипту, что упрощает отладку.
- Существуют определенные ограничения на количество символов, которые могут быть отправлены с помощью метода GET, поэтому POST предпочтительнее для больших форм.
- Данные, поступающие с помощью метода GET, принимаются путем просмотра переменной среды QUERY_STRING (обычно считываемой с помощью функции getenv в C или средства $ ENV в PERL). Данные , которые приходят в с помощью метода POST доступен через STDIN с помощью получает в C или прочитать в PERL.
- Все поля поступающих данных будут объединены в одну строку, и многие символы будут заменены и, следовательно, потребуют перевода. Например, все пробелы будут заменены на плюсы.
Переменная среды QUERY_STRING поднимает тему переменных среды в целом. Есть ряд переменных среды, которые вы можете исследовать в своих сценариях CGI, в том числе:
- AUTH_TYPE
- CONTENT_LENGTH
- CONTENT_TYPE
- GATEWAY_INTERFACE
- HTTP_ACCEPT
- HTTP_USER_AGENT
- PATH_INFO
- PATH_TRANSLATED
- QUERY_STRING
- REMOTE_ADDR
- REMOTE_HOST
- REMOTE_IDENT
- REMOTE_USER
- REQUEST_METHOD
- SCRIPT_NAME
- SERVER_NAME
- SERVER_PORT
- SERVER_PROTOCOL
- SERVER_SOFTWARE
Создание реальной формы
Настоящая форма будет состоять из множества областей ввода, и потребуется некоторый объем кода в сценарии, чтобы отменить сопоставления символов и проанализировать отдельные строки. Начнем с рассмотрения стандартных элементов управления вводом в форме. Они включают:- Однострочный ввод текста
- Многострочный ввод текста
- Списки выбора
- Флажки
- Радио-кнопки
- Специализированные кнопки для отправки или очистки формы
Вот несколько примеров, демонстрирующих использование различных тегов управления:
Однострочное редактирование
Слово «ввод» обозначает область редактирования одной строки. Поле «имя» предоставляет идентификатор элемента управления сценарию CGI и должно быть уникальным для каждого элемента управления в форме. Поле «размер» указывает ширину в символах области ввода формы. «Maxlength» ограничивает максимальное количество символов в области ввода. «Значение» устанавливает начальное значение.
Code:
Enter Name: <input name="Name" size=30 maxlength=50
value="Sample">
Обычно области ввода предшествует фрагмент статического текста, определяющий назначение поля ввода. Здесь показан статический текст «Введите имя:».
Вы можете добавить значение «type = int», чтобы ограничить ввод целочисленными значениями. По умолчанию тип - «текст», и он принимает любые символы.
Многострочное редактирование
Многострочная область редактирования аналогична области ввода. Вы определяете имя для элемента управления и определяете его размер в форме в строках и столбцах. Все, что вы помещаете перед тегом </textarea>, будет отображаться в элементе управления как значение по умолчанию.
Code:
<textarea name="Company Address" cols=30
rows=4></textarea>
Флажки
Флажок - это специализированная форма области ввода с типом «флажок».
Code:
<input type=checkbox name="Include" value=1>
Радио-кнопки
Радиокнопки похожи на флажки, но визуально сгруппированы вместе:
Code:
Choose the search area:<br>
<input type=radio CHECKED name=universe value=US-STOCK>
Stocks
<input type=radio name=universe value=CA-STOCK>
Canadian Stocks
<input type=radio name=universe value=MMF>
Money Markets
<input type=radio name=universe value=MUTUAL>
Mutual Funds
Списки выбора
Список выбора предлагает пользователю выбор из ряда вариантов. Тег для списка выбора позволяет указать количество видимых строк в поле «размер», а также значения для всех параметров.
Code:
Select an Option<br>
<SELECT size=2 NAME="Option">
<OPTION> Option 1
<OPTION> Option 2
<OPTION> Option 3
<OPTION> Option 4
</SELECT>
Специализированные кнопки
Следующие теги создают две специальные кнопки: одна для отправки формы на сервер, а вторая для сброса формы:
Code:
<INPUT TYPE=submit value="Submit">
<INPUT TYPE=reset value="Reset">
Собираем все вместе
Допустим, вы хотите создать простую анкету для одной из своих веб-страниц. Например, вы хотите запросить имя, пол, возраст и комментарий читателя, а затем обработать его в сценарии CGI. HTML-форма может находиться в файле с именем carder.market/survey.htm и выглядеть так:
Code:
<html>
<body>
<h1>Carder.uk Survey Form<h1>
<FORM METHOD=POST ACTION="http:
//www.carder.market/cgi-bin/survey.cgi">
Enter Your Name:
<input name="Name" size=20 maxlength=50>
<P>Enter your sex:
<input type=radio CHECKED name=sex value=MALE>Male
<input type=radio name=sex value=FEMALE>Female
<P>Select your age<br>
<SELECT size=2 NAME=age>
<OPTION> 1-10
<OPTION> 11-20
<OPTION> 21-30
<OPTION> 31-40
<OPTION> 41-50
<OPTION> 51-60
<OPTION> 61 and up
</SELECT>
<P>Enter Your Comment:
<input name="Name" size=40 maxlength=100>
<P>
<INPUT TYPE=submit value="Submit">
<INPUT TYPE=reset value="Reset">
</FORM>
</body>
</html>
Резюме
В этом кратком обзоре сценариев CGI мы увидели, что:- Сценарий CGI - это программа, обычно это программа на языке C или сценарий PERL.
- На большинстве серверов сценарии CGI находятся в каталоге cgi-bin. Сценарий выполняется, когда URL-адрес сценария запрашивается браузером.
- Все, что сценарий отправляет в STDOUT, будет отправлено в браузер. Строка "Content-type: text/html\n\n" должна быть отправлена в первую очередь. После этого все идет; но обычно отправляются действительные теги HTML для действительного документа HTML.
- Входные данные отправляются в сценарий путем создания HTML-формы, действие которой указывает URL-адрес сценария.
- Когда сценарий получает данные из формы, он должен проанализировать различные строки и преобразовать все измененные символы. Мы видели простую программу на C, которая может выполнять эти задачи. Библиотека CGI для PERL упрощает преобразование сценариев PERL.