Интернет решения от доктора Боба - [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 может быть веселым и увлекательным занятием. Владстон Феррейра Фило знакомит нас с вычислительным мышлением, позволяющим решать любые сложные задачи. Научиться писать код просто — пара недель на курсах, и вы «программист», но чтобы стать профи, который будет востребован всегда и везде, нужны фундаментальные знания. Здесь вы найдете только самую важную информацию, которая необходима каждому разработчику и программисту каждый день. «Эта книга пригодится и для решения повседневных задач.
В учебно-методическом пособии рассматриваются основы языка программирования PL/SQL, реализованного в системе управления базами данных Oracle Database Server. Приводятся сведения о поддерживаемых типах данных, структуре программ PL/SQL и выполнении SQL-предложений в них. Отдельно рассмотрено создание хранимых в базах данных Oracle программ PL/SQL – процедур, функций, пакетов и триггеров.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
В книге рассматриваются базисные теоретические основы, необходимые для построения компиляторов, основные технологические приемы и методы их реализации. В ней приведены различные варианты заданий для выполнения лабораторного практикума по курсу «Системное программное обеспечение», а также примеры выполнения этих заданий. В каждом примере подробно рассматриваются все особенности его выполнения, как на этапе подготовки необходимой математической базы, так и на этапе программной реализации. В лабораторных работах автор обращает внимание на основные сложности, связанные с ее выполнением, а также на возможные типичные ошибки и недочеты, дает рекомендации по возможностям программной реализации, отличным от кода, приводимого в примерах.Книга ориентирована на студентов, обучающихся в технических вузах по специальностям, связанным с вычислительной техникой.
Книга известного специалиста по программированию (Югославия), содержащая основы языка Пролог и его приложения для решения задач искусственного интеллекта. Изложение отличается методическими достоинствами — книга написана в хорошем стиле, живым языком. Книга дополняет имеющуюся на русском языке литературу по языку Пролог.Для программистов разной квалификации, специалистов по искусственному интеллекту, для всех изучающих программирование.
РАССЫЛКА ЯВЛЯЕТСЯ ЧАСТЬЮ ПРОЕКТА RSDN, НА САЙТЕ КОТОРОГО ВСЕГДА МОЖНО НАЙТИ ВСЮ НЕОБХОДИМУЮ РАЗРАБОТЧИКУ ИНФОРМАЦИЮ, СТАТЬИ, ФОРУМЫ, РЕСУРСЫ, ПОЛНЫЙ АРХИВ ПРЕДЫДУЩИХ ВЫПУСКОВ РАССЫЛКИ И МНОГОЕ ДРУГОЕ.