Выбрать главу

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