Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ПЗ_4_Применение CGI-скриптов.doc
Скачиваний:
11
Добавлен:
20.08.2019
Размер:
7 Мб
Скачать
☆

If Not Eof(Input) then begin

Read(Input,s);

WriteLn('<li>',s);

WriteLn(fLog,s);

end;

Writeln(fLog,'QUERY_STRING=',ParmString);

WriteLn('<a name=Env><h2>Переменные окружения:</h2><ul>');

p:=GetEnvironmentStrings;

while StrLen(p)<>0 do begin

WriteLn('<li>',p);

WriteLn(fLog,':',p);

p:=strend(p);

inc(p);

end;

WriteLn('</ul><hr>');

WriteLn(

'<a name=Info><a href="http://www.multimania.com/tothpaul">');

WriteLn('Дополнительная информация о CGI</a>');

WriteLn('</body></html>');

end.

Так это выглядит в броузере:

Рисунок 15 - Результат работы CGI-программы

2.5 Вывод изображений

Для сообщения броузеру, что передаваемый документ является HTML-документом, CGI-программа выводит специальный заголовок, не отображаемый броузером:

WriteLn(‘Content-Type: text/html’);

WriteLn('');

Точно таким же образом можно указать и другой тип данных. Например, для вывода изображения в формате GIF достаточно вывести следующее:

WriteLn(‘Content-Type: image/gif’);

WriteLn('');

Таким образом, сообщается броузеру, что далее будет следовать именно изображение, то есть будет происходить передача двоичных данных.

В начале необходимо разобраться, как отправить двоичные данные в стандартный поток вывода: STDOUTPUT. Для этого ниже приведены две процедуры: первая выводит поток TMEMORYSTREAM в STDOUTPUT. Поток памяти TMEMORYSTREAM можно представить себе как расположенный в памяти файл. А вторая выводит двоичный файл в выходной поток:

// Процедура вывода потока в STDOUTPUT.

Procedure WriteStream(stream:TmemoryStream);

var

OutStream:ThandleStream;

begin

Flush(output);

OutStream:=

ThandleStream.Create(GetStdHandle(STD_OUTPUT_HANDLE));

Stream.SaveToStream(OutStream);

OutStream.Free;

end;

// Процедура для передачи двоичного файла

procedure WriteFile(FileName:string);

Var s:TfileStream;

m:TmemoryStream;

begin

s:=TfileStream.Create(FileName,fmOpenRead);

m:=TmemoryStream.Create;

m.LoadFromStream(s);

WriteStream(m); m.Free;s.Free;

end;

Теперь осталось только создать (или взять готовый) GIF файл и вывести его:

procedure WriteGIF(FileName:string);

begin

WriteLn(‘Content-type: image/gif’);

WriteLn;

WriteFile(FileName);

end;

  1. Выполните

2.1 Создайте консольное приложение и протестируйте CGI-программу локально, выводя результат работу на экран.

Пример простейшей CGI-программы:

Program ExampleCGI;

{$apptype console}

begin

WriteLn('Content-type: text/html');

WriteLn;

WriteLn('Hello World');

end.

Откомпилируйте и поместите в каталог c:\internet\delphi\cgi-bin, который должен быть определен как каталог, в котором размещены все CGI-программы.

Для обращения к программе в строке адреса в броузере наберите:

http://ваш_сервер/cgi-bin/ExampleCGI

Проверьте отображение результата:

2.2 Разработайте CGI-программу, которая выводит список некоторых переменных окружения и их значения:

program CgiVars;

{$APPTYPE CONSOLE}

uses

Windows;

const

VarList: array [1..17] of string [30] =

('SERVER_NAME', 'SERVER_PROTOCOL',

'SERVER_PORT', 'SERVER_SOFTWARE',

'GATEWAY_INTERFACE', 'REQUEST_METHOD',

'PATH_TRANSLATED', 'HTTP_REFERER',

'SCRIPT_NAME', 'PATH_INFO',

'QUERY_STRING', 'HTTP_ACCEPT',

'REMOTE_HOST', 'REMOTE_USER',

'REMOTE_ADDR', 'REMOTE_IDENT',

'HTTP_USER_AGENT');

var