Интернет решения от доктора Боба - [7]

Шрифт
Интервал

1.3.4. Динамический вывод

Для начала посмотрим на стандартное "hello world" CGI приложение. Единственное, что оно должно сделать, это вернуть HTML страницу со строкой "hello, world". Перед тем как мы начнем делать это – обратим внимание на следующее: CGI приложение должно сообщить миру какой (MIME) формат оно выдает. В нашем случае это "text/html", которое мы должны указать как: content-type: text/html , и затем одну пустую строку.

Вот код нашего первого "Hello, world!" CGI приложения:

program CGI1;

{$APPTYPE CONSOLE}

begin

>   writeln('content-type: text/html');

>   writeln;

>   writeln('

>   writeln('

>   writeln('Hello, world!');

>   writeln('

>   writeln('

> end.

Если вы откомпилируете данную программу в Дельфи 2 или 3 и затем запустите ее из web браузера подключенного к web серверу, где оно записано в исполнимом виде в исполняемом каталоге таком как cgi-bin, то вы увидите текст "Hello, world!" на странице.

1.3.5. CGI ввод

Теперь, мы знаем как создавать CGI приложение, которое может генерировать динамическую HTML страницу (или в действительности почти статическую). Но как насчет ввода? Здесь более чем одно действие: мы должны проверять переменную DOS 'CONTENT LENGTH' что бы знать как много символов мы можем прочитать со стандартного ввода (если мы попытаемся читать больше чем есть, то мы повиснем навсегда). Конечно, это широко известный факт. Я написал компонент TBDosEnvironment чтобы вы могли иметь доступ до переменных среды DOS:

unit DrBobDOS;

interface

uses

>   SysUtils, WinTypes, WinProcs, Classes;


type

>   TBDosEnvironment = class(TComponent)

>   public

>   { Public class declarations (override) }

>     constructor Create(AOwner: TComponent); override;

>     destructor Destroy; override;


>   private

>   { Private field declarations }

>     FDosEnvList: TStringList;

>     procedure DoNothing(const Value: TStringList);


>   protected

>   { Protected method declarations }

>     Dummy: Word;

>     function GetDosEnvCount: Word;


>   public

>   { Public interface declarations }

>     function GetDosEnvStr(const Name: String): String;

>     { This function is a modified version of the GetEnvVar function thatappears in the WinDos unit that comes with Delphi. This function's interface uses Pascal strings instead of null-terminated strings.

>     }


>   published

>   { Published design declarations }

>     property DosEnvCount: Word read GetDosEnvCount write Dummy;

>     property DosEnvList: TStringList read FDosEnvList write DoNothing;

>   end;


implementation


>   constructor TBDosEnvironment.Create(AOwner: TComponent);

>   var

>     P: PChar;

>   begin

>     inherited Create(AOwner);

>     FDosEnvList := TStringList.Create;

>   {$IFDEF WIN32}

>     P := GetEnvironmentStrings;

>   {$ELSE}

>     P := GetDosEnvironment;

>   {$ENDIF}

>     while P^ <> #0 do

>     begin

>       FDosEnvList.Add(StrPas(P));

>       Inc(P, StrLen(P)+1) { Fast Jump to Next Var }

>     end;

>   end{Create};


>   destructor TBDosEnvironment.Destroy;

>   begin

>     FDosEnvList.Free;

>     FDosEnvList := nil;

>     inherited Destroy

>   end{Destroy};


>   procedure TBDosEnvironment.DoNothing(const Value: StringList);

>   begin

>   end{DoNothing};


>   function TBDosEnvironment.GetDosEnvCount: Word;

>   begin

>     if Assigned(FDosEnvList) then

>       Result := FDosEnvList.Count

>     else

>       Result := 0;

>   end{GetDosEnvCount};


>   function TBDosEnvironment.GetDosEnvStr(const Name: String): String;

>   var

>     i: Integer;

>     Tmp: String;

>   begin

>     i := 0;

>     Result := '';

>     if Assigned(FDosEnvList) then while i < FDosEnvList.Count do

>     begin

>       Tmp := FDosEnvList[i];

>       Inc(i);

>       if Pos(Name,Tmp) = 1 then

>       begin

>         Delete(Tmp,1,Length(Name));

>         if Tmp[1] = '=' then

>         begin

>           Delete(Tmp,1,1);

>           Result := Tmp;

>           i := FDosEnvList.Count { end while-loop }

>         end

>       end

>     end

>   end{GetDosEnvStr};

end.

Здесь список переменных среды (предоставленный Deepak Shenoy), которые доступны для CGI программ. Даже ISAPI программы могут использовать эти переменные:

Environment Variable Purpose/Meaning/Value
GATEWAY_INTERFACE Версия CGI для которой скомпилирован web сервер
SERVER_NAME IP адрес сервера или имя.
SERVER_PORT Порт на сервере, которые принимает HTTP запросы.
SERVER_PROTOCOL Имя и версия протокола, используемая для обработки запросов.
SERVER_SOFTWARE Имя (и обычно версия) программного обеспечения сервера.
AUTH_TYPE Схема проверки прав используемая сервером (NULL, BASIC)
CONTENT_FILE Файл используемый для передачи данных CGI программе (только Windows HTTPd/WinCGI).
CONTENT_LENGTH Количество байтов переданное на стандартный вход (STDIN) как содержимое POST запроса.
CONTENT_TYPE Тип данных переданных на сервер.
OUTPUT_FILE Имя файла для результата (только Windows HTTPd/WinCGI).
PATH_INFO Дополнительный, относительный путь переданный на сервер после имени скрипта, но до данных запроса.
PATH_TRANSLATED Та же самая информация, но преобразованная из относительного пути в абсолютный.
QUERY_STRING Данные переданные как часть URL, все после символа ? в URL.
REMOTE_ADDR Адрес IP или имя сервера конечного пользователя.

Рекомендуем почитать
Теоретический минимум по Computer Science

Хватит тратить время на скучные академические фолианты! Изучение Computer Science может быть веселым и увлекательным занятием. Владстон Феррейра Фило знакомит нас с вычислительным мышлением, позволяющим решать любые сложные задачи. Научиться писать код просто — пара недель на курсах, и вы «программист», но чтобы стать профи, который будет востребован всегда и везде, нужны фундаментальные знания. Здесь вы найдете только самую важную информацию, которая необходима каждому разработчику и программисту каждый день. «Эта книга пригодится и для решения повседневных задач.


Язык PL/SQL

В учебно-методическом пособии рассматриваются основы языка программирования PL/SQL, реализованного в системе управления базами данных Oracle Database Server. Приводятся сведения о поддерживаемых типах данных, структуре программ PL/SQL и выполнении SQL-предложений в них. Отдельно рассмотрено создание хранимых в базах данных Oracle программ PL/SQL – процедур, функций, пакетов и триггеров.


Перевод в электронный формат, кодированные наборы шрифтов и система Оптического Распознавания Символов для многошрифтовых информационных ресурсов на примере “Летописи журнальных статей”

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Системное программное обеспечение. Лабораторный практикум

В книге рассматриваются базисные теоретические основы, необходимые для построения компиляторов, основные технологические приемы и методы их реализации. В ней приведены различные варианты заданий для выполнения лабораторного практикума по курсу «Системное программное обеспечение», а также примеры выполнения этих заданий. В каждом примере подробно рассматриваются все особенности его выполнения, как на этапе подготовки необходимой математической базы, так и на этапе программной реализации. В лабораторных работах автор обращает внимание на основные сложности, связанные с ее выполнением, а также на возможные типичные ошибки и недочеты, дает рекомендации по возможностям программной реализации, отличным от кода, приводимого в примерах.Книга ориентирована на студентов, обучающихся в технических вузах по специальностям, связанным с вычислительной техникой.


Программирование на языке Пролог для искусственного интеллекта

Книга известного специалиста по программированию (Югославия), содержащая основы языка Пролог и его приложения для решения задач искусственного интеллекта. Изложение отличается методическими достоинствами — книга написана в хорошем стиле, живым языком. Книга дополняет имеющуюся на русском языке литературу по языку Пролог.Для программистов разной квалификации, специалистов по искусственному интеллекту, для всех изучающих программирование.


Программирование на Visual C++. Архив рассылки

РАССЫЛКА ЯВЛЯЕТСЯ ЧАСТЬЮ ПРОЕКТА RSDN, НА САЙТЕ КОТОРОГО ВСЕГДА МОЖНО НАЙТИ ВСЮ НЕОБХОДИМУЮ РАЗРАБОТЧИКУ ИНФОРМАЦИЮ, СТАТЬИ, ФОРУМЫ, РЕСУРСЫ, ПОЛНЫЙ АРХИВ ПРЕДЫДУЩИХ ВЫПУСКОВ РАССЫЛКИ И МНОГОЕ ДРУГОЕ.