Home
Главная
Forums
Форум
Your Account
Ваш аккаунт
Web-технологии
HTML, XML, DHTML
JavaScript
SQL
PHP
Perl
SSI
ASP
CSS

Графика
Adobe PhotoShop
Adobe PhotoShop - 2
Macromedia Flash

Компьютеры
Hardware
Мобильные технологии
КПК и ноутбуки

Операционные системы
Unix/Linux
Windows 9x
Windows XP

Стоит посмотреть
  • Дата связи - хостинг здесь хостинг-партнер


  • юзабилити консалтинг


  • Отличный товар - hyundai. Форум о hundai в Екатеринбурге.


  • Можно цену на пресс гидравлический узнать на сайте.


  • Что такое CGI?

    Что такое CGI? Это общий интерфейс шлюзов, связывающий программу, работющую под управлением вебсервера и клиента в виде HTTP-браузера. Иными словами, это средство, которое позволяет генерить HTML-документы "на лету", в зависимости от условий и пожеланий программиста.

    Как и любое клиент-серверное средство, CGI-программа состоит из двух частей - одной, которая работает на клиенте, в среде браузера, и другой, работающей на сервере, в среде вебсервера. Клиентская часть пишется на HTML (возможно, с употреблением раздичных дополнительных средств, расширяющих его возможности), серверная часть может быть на- писана на любом языке программирования, способном создавать выполняе- мые программы на платформе, на которой установлен вебсервер. Мы будем использовать для этих целей Перл, потому что он удобен для обработки текстовых строк - а HTML документ представляет собой именно текст.

    Принцип работы интерфейса очень прост - вебсервер, если ему это разрешено, может запустить выполняемую программу; в отличие от запуска этой же программы пользователем потоки вода, вывода и ошибок запущен- ной программы будут перенаправлены: ввода и вывода в протокол HTTP, а ошибок - в файл лога ошибок вебсервера. Таким образом, мы можем созда- вать HTML-документ "на лету", просто выводя в поток вывода его теги с помощию команды print или ее аналога.

    Впрочем, лучше один раз увидеть, чем сто раз услышать. Для того, чтобы работать с клиент-серверными пограммами, нужно сначала устано- вить клиент и сервер. В качестве клиента может быть использован любой браузер, поддерживающий протокол HTTP (рекомендуется Netscape, потому что он достаточно строго реагирует на ошибки; можно быть увереным, что то, что работает в нем будет работать где угодно - а обратное выполня- ется редко), в качестве сервера рекомендуется вебсервер Apache. Это один из самых распространенных вебсерверов, он может быть скомпилиро- ван полд все мыслимые платформы и ситемы, и отладженные под него прог- раммы скорее всего сможет установить любой провайдер.

    Вебсервер Apache для Windows лучше всего получить по адресу ftp://cdl.bmstu.ru/soft/cgi . Установите его, однако не в директорию, которую он предлагает для установки, а в c:apache . Вебсервер может работать и в том случае, если он установлен в руть по-умолчанию, одна- ко при его настройке возникнут некоторые разночтения с предлагаемым здесь вариантом - если Вы хотите избегнуть нежелательных осложнений, измените путь по-умолчанию.

    Запустите вебсервер (на экране появится пустое черное окно - это нормальный результат успешного запуска; ни в коем случае не закрывайте это окно принудительно - для финиширования вебсервер создал Вам специ- альную иконку). Обратитесь к нему из браузера через URL http://localhost и убедитесь, что демонстрационная веб-страница, кото- рая находится в директори htdocs успешно запускается.

    Если вебсервер не удалось запустить, прочитайте выводимое им со- общение об ошибке. Чаще всего вебсервер не может запуститься из-за то- го, что не указано имя. Откройте на редактирование основной файл кон- фигурации вебсервера (httpd.conf) и снимите ремарку с пересенной Servername, присвоив серверу любое имя - например localhost.

    Теперь имеет смысл попробовать выполнить первую CGI-программу.

    Для того, чтобы иметь возможность писать CGI-программы на Перле, следует установить Перл. Взять его можно там же, где и вебсервер, ус- тановка этой программы не содержит особых подводных камней. Вам будет предложено скомпиллировать Перл из текста на Си, если Вы откажетесь от этого (что рекомендуется), будет развернута уже скомпилированная би- нарная версия. После установки не забудьте проложить в файле Autoexec.bat путь в директорию c:perlin - туда, где содержится файл perl.exe.

    Проверьте правильность установки Перла, написав простейшую прог- рамму, состоящую из одной строки:

    print "Hello";

    Запустите эту программу из любой директории, набрав "perl filename", где filename - имя файла, в который Вы вписали приведенную выше строчку. Если на экране появилось слово Hello, это ззначит что Вы все сделали правильно.

    В отличие от многих других вебсерверов, Апач сам вызывет интерп- ретатор Перла, таким образом в каждой программе нужно указывать, где он находиться. Таким образом, первой строчкой нашего CGI-скрипта дол- жен быть путь к интерпретатору:

    #!perl

    после того, как путь к интерпретатору указан, нужно выставить серверный http-заголовок, указывающий тип отдаваемых данных:

    print "Content-type: text/html ";

    Обратите внимание, что поле http-заголовков завершается двойным переводом строки. Сами заголовки, если их несколько, отделяются друг от друга одинарным переводом строки.

    Третья строчка нашей программы будет содержать необходимую для создания html-документов обвеску:

    print "";
    print "";
    print "
    ";
    

    Обратите внимание, что при использовании внутри команды print, двойные кавычки необходимо отчеркивать - иначе интерпретатор примет кавычки за окончание команды, а то, чт о идет после них - за незавер- шенную строку, и ответит ошибкой выполнения.

    Теперь необходимо вести строчку вывода, и закрыть html-докумнт.

         print "Hello";
         print "";
    

    Таким образом, вся наша первая программа будет выглядеть так:

    #!perl
    print "Content-type: text/html
    
    ";
    print "";
    print "";
    print "
    ";
    print "Hello";
    print "";
    

    Проверьте правильность ее выполнения, запустив программу локаль- но. Для этого наберите в командной строке: perl filename, где filename - это имя Вашей программы. Если все в порядке, программа должна напи- сать на экране http-заголовок, а затем теги html-документа, который программа создает.

    После локальной проверки нужно запустить программу как кли- ент-серверное приложение. Для этого нужно дать программе права на вы- полнение (для операционых систем, где это актуально), и расположить в директории, в которой вебсервер распознает програмы как CGI-приложе- ния. По умолчанию, это директория cgi-bin, в которой и надо разместить нашу программу.

    Для запуска программы нужно набрать в окне location ее URL:

    http://localhost/cgi-bin/filename

    Как передавать данные между клиентом и сервером?

    Как передать данные с сервера на клиент мы уже рассмотрели. Сле- дующим шагом представляется передача данных с клиента на сервер и фор- мирование клиента с учетом переданной на сервер информации.

    Существуют несколько МЕТОДОВ, с помощью которых можно передать информацию на сервер; самые распространенные из них - это метод GET, передающий данные в URL и метод POST, передающий данные в теле запро- са. Hедостатком первого является ограниченный объем передоваемой ин- формации (до 127 байт), недостатком виторого - сложность в формирова- нии запроса.

    В самом деле, чтобы сформировать запрос методом GET вполне доста- точно написать знак вопроса после URL вызова, и перечислять через ам- персанд пары "имя=значение":

    http://localhost/cgi-bin/test2.cgi?v1=vasya&v2=petya и так далее.

    Теперь нужно получить эти данные на сервере, для чего достаточно полу- чить содержимое переменной окружения вебсервера QWERY-STRING. Эта пе- ременная содержит то, что в URL располагалось после знака вопроса.

    Есть, однако, одна особенность, которая делает затруднительной использование этой переменнй. Дело в том, что русские буквы, как и специальные символы, в URL заперщены - поэтому их придется заменить на специальный код, который не содержит запретных символов, а просле при- ема на сервере потребуется произвести обратную перекодировку. Такая перекодировка является вполне стандартной для CGI-программирования, и в комплекте любого Перла предусмотрен модуль, который умеет читать со- ответствующую переменую, перекодировать ее содержимое и раскладывать приняные данные по переменным. Модуль, в котором содержася эти подп- рограммы называется CGI. Подключите его к своей программе, написав:

    use CGI qw(param);

    после чего Вы сможете захватывать из входного потока любую переменную, написав, к примеру:

    $v1=param("v1");

    теперь, если Вы вызвали скрипт с помощью приведенной выше URL-и, то модуль будет искать в принятых данных переменную потока "v1", а найдя, присвоит ее значение скаляру $v1, который будет теперь равняться "vasya". Чтобы подтвердить правильность наших построений, давайте вы- полним программу, которая иллюстрирует такую передачу данных:

    #!perl
    use CGI qw(param);
    $v1=param("v1");
    $v2=param("v2");
    print "Content-type: text/html
    
    ";
    print "";
    print "";
    print "";
    print "Hello, $v1 , $v2 !!!";
    print "";
    

    Метод POST передает данные в теле запроса, а получать их следует через входной поток программы (напомню, при запуске программы вебсер- вером он направлен в протокол HTTP). Для отсылки данных этим методом в HTML служат формы. Hапример, выполнив на клиенте приведенную ниже фор- му мы получим точно такой же результат, как и в предыдущем примере:

    
    

    Модуль CGI, обрабатывающий входные данные работает совершенно одинаково как при применении метода GET, так и при использовании мето- да POST.


    Дата публикации: 10/12/2005
    Прочитано: 1715 раз


    Дополнительно на данную тему:

    CGI интерфейс
    Работа с MySql. Создание Web интерфейса
    Image Magick или фотошоп для perl
    Спецификация языка Perl
    Маленькие хитрости твоего мыла
    Особенности CGI-режиссуры
    Особенности CGI-режиссуры (часть 2)
    Запуск и отладка Perl-программ и CGI-скриптов под Windows
    Делаем счетчик посещений на Perl
    Работа с файлами и каталогами на Perl

    Назад | Начало | Наверх
    Rambler's Top100