PNWS Volejte +420 602 860 704  
Vφtejte | Mailing list  
Co to je PNWS?
Jak spravovat server?

Konfigurace TCP/IP
Nastavenφ serveru 1.0.7.3
Nastavenφ serveru 1.0.7.4
Web Administrace
Soubor HTTP.AUT
Instalace PERLU 5.0
Instalace PHP for Win32
Jak vytvß°et strßnky
StruΦn² ·vod do HTML
Jak na CGI aplikace v PERLu
Jak na ISAPI skripty v Delphi
Omezenφ ISAPI v PNWS
┌vod do PHP
Jak pou╛φvat SSI
Co to je PNWS-SSL
Jak sehnat platn² certifikßt
Jak si vyrobit testovacφ certifikßt
Knihovna SSLeay, licence
U₧iteΦnΘ nßstroje
Bug report

Oznßmenφ o chyb∞
Download center
Mailing list
Licence PNWS
 

Jak na ISAPI skripty v Delphi?

   PinkNet Web Server je vybaven zßkladnφ podporou ISAPI skript∙, kterß mu umo╛≥uje spolupracovat s aplikacemi, kterΘ byli vyvinuty pro Win32 platformu v rozhranφ M$ Internet Server API - ISAPI.
   Psanφ skript∙ je pom∞rn∞ jednoduchΘ, pokud mßte alespo≥ p°edstavu jak se volajφ. Jß osobn∞ pou╛φvßm Delphi a proto nßsledujφcφ ukßzka bude prßv∞ pro n∞j.
   Zde je v²pis jedoduchΘho skriptu (dostupn² na adrese http://localhost/demo/cgi-bin/isapi_minimal.dll ve standartnφ instalaci PNWS):
library ISAPI_Minimal;

uses
  SysUtils,
  Classes,
  isapi2 in '\Program Files\Borland\Delphi\Source\RTL\WIN\isapi2.pas';

// Zalezi na velikosti pismen v nazvu !!!!
function GetExtensionVersion(var ver: THSE_VERSION_INFO): Boolean;
stdcall;
begin
  result:=True;
  // Rekni, ze je vse OK -> sice nic nevracime, ale to nevadi 
end;

// Zalezi na velikosti pismen v nazvu !!!!
function HttpExtensionProc(var ecb: TEXTENSION_CONTROL_BLOCK):
LongInt; stdcall;
var
  FN_Write: TWriteClientProc;
  s: String;
  len: Integer;
begin
  // Vytvor si funkci pro zapis dat
  @FN_Write:=@ecb.WriteClient;

  // Vytvor si do stringu S odpoved ve formatu HTML
  s:=  'HTTP/1.0 200 OK'#13#10#13#10;
  s:=s+'<html><head>'#13#10;
  s:=s+'   <title>ISAPI skript</title>'#13#10;
  s:=s+'</head><body bgcolor=white>'#13#10;
  s:=s+'<h1>Generovanß strßnka</h1>'#13#10;
  s:=s+'Tento text je generovan² knihovnou ISAPI v serveru PNWS'#13#10;
  s:=s+'</body></html>';
  len:=Length(s);

  // Zapis do prohlizece
  FN_WRITE(ecb.ConnID, PChar(s), len, 0)

  // No a to je asi vse... ...je jasne, ze skript nebude omezen jen na
  // jednoduche splacani neceho do stringu S, ale bude neco konat
end;

// Potreba pro export funkci
exports
  GetExtensionVersion,
  HttpExtensionProc;

begin
end.
   Je jasnΘ, ╛e v∞t╣ina skript∙ pot°ebuje VSTUPN═ data a proto si ukß╛eme i jak si je od serveru zφstkat. Pro zφskßnφ dat pomocφ metody po╛adavky GET (tedy skript.dll?data) pou╛ijeme zßznam typu PChar dostupn² p°es jmΘno ecb.lpszQueryString. Data p°es metodu POST jsou ulo╛ena v bloku na kter² ukazuje pointer ecb.lpbData. Jejich velikost je urΦena prom∞nou ecb.cbTotalBytes.
   Pro zφskßnφ prom∞nΘ od serveru (nap°φklad jmΘno serveru, Φi typ prohlφ╛eΦe) m∙╛eme do procedury HttpExtensionProc p°idat nßsledujφcφ vno°enou proceduru:
// Fuknce vracφ promenou prostredi od serveru 
function GetServerVar(name:string):string;
var FN_GetVariable:TGetServerVariableProc;
    pch:PChar;
    len:integer;
begin
  // Prirazeni procedury
  @FN_GetVariable:=@ecb.GetServerVariable;
  // maximalni velikost prichozich dat
  len:=1024;
  pch:=StrAlloc(len);
  // Zeptej se na data
  if FN_GetVariable(ecb.ConnID,PChar(name),pch,len) then
    result:=pch
  else
    result:='*nedefinovano*';
end;
 
 
  O PinkNet Web Serveru | Demo vSHOP.pnws | Mailing list | Download | Oznßmenφ o chyb∞
 
Kontakt