Интернет решения от доктора Боба - страница 9

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

стр.

>     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 или имя сервера конечного пользователя.
REMOTE_USER Имя пользователя, если используется схема проверки прав.
REQUEST_LINE Полный HTTP запрос представляемый сервером (зависит от сервера).
REQUEST_METHOD Указывает метод передачи данных, как часть URL (GET) или через стандартный ввод STDIN (POST).
SCRIPT_NAMEИмя запущенного скрипта.

Немного еще дополнительной, но важной информации. Немного об переменных среды, которые особо важны для обработки запроса, и небольшое описание по обработке стандартных CGI приложений:

REQUEST_METHOD – указывает, как посланы данные, как POST или как GET метод.

QUERY_STRING – если используется GET

CONTENT_LENGTH – если мы используем POST, то мы должны прочитать "CONTENT_LENGTH" символов со стандартного ввода (которые оканчиваются "Query", подобно QUERY_STRING при использовании метода GET).

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


стр.

Похожие книги