Интернет решения от доктора Боба - страница 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 приложение должно писать свой вывод на стандартный выход, если мы используем консольное приложение.