home *** CD-ROM | disk | FTP | other *** search
/ PC World 2000 April / PCWorld_2000-04_cd.bin / Komunik / Servery / PinkNet / pnws1076prof.exe / file0037.bin < prev    next >
Encoding:
Text File  |  2000-03-12  |  4.3 KB  |  101 lines

  1. <HTML>
  2. <HEAD>
  3.    <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-2">
  4.    <META NAME="Author" CONTENT="Tomas Rosa">
  5.    <META NAME="GENERATOR" CONTENT="Mozilla/4.02 [en] (Win95; I) [Netscape]">
  6.    <TITLE>Jak na ISAPI skripty v Delphi</TITLE>
  7.  
  8. <!--#include virtual="/main_header.inc"-->
  9.  
  10. <div style="font-family:Tahoma,Helvetica,Arial; font-size:10pt;">
  11.  
  12. <H3>
  13. Jak na ISAPI skripty v Delphi?</H3>
  14.    PinkNet Web Server je vybaven zßkladnφ podporou ISAPI skript∙,
  15. kterß mu umo╛≥uje spolupracovat s aplikacemi, kterΘ byli vyvinuty pro Win32
  16. platformu v rozhranφ M$ Internet Server API - ISAPI.
  17. <BR>   Psanφ skript∙ je pom∞rn∞ jednoduchΘ, pokud mßte alespo≥
  18. p°edstavu jak se volajφ. Jß osobn∞ pou╛φvßm Delphi a proto nßsledujφcφ
  19. ukßzka bude prßv∞ pro n∞j.
  20. <BR>   Zde je v²pis jedoduchΘho skriptu (dostupn² na adrese <A HREF="http://localhost/demo/cgi-bin/isapi_minimal.dll">http://localhost/demo/cgi-bin/isapi_minimal.dll</A>
  21. ve standartnφ instalaci PNWS):
  22. <PRE><B>library</B> ISAPI_Minimal;
  23.  
  24. <B>uses
  25. </B>  SysUtils,
  26.   Classes,
  27.   isapi2 in '\Program Files\Borland\Delphi\Source\RTL\WIN\isapi2.pas';
  28.  
  29. <I><FONT COLOR="#000099">// Zalezi na velikosti pismen v nazvu !!!!
  30. </FONT></I><B>function </B>GetExtensionVersion(<B>var </B>ver: THSE_VERSION_INFO): Boolean;
  31. <B>stdcall</B>;
  32. <B>begin
  33. </B>  result:=True;
  34.   <I><FONT COLOR="#000099">// Rekni, ze je vse OK -> sice nic nevracime, ale to nevadi</FONT></I> 
  35. <B>end;
  36.  
  37. </B><I><FONT COLOR="#000099">// Zalezi na velikosti pismen v nazvu !!!!
  38. </FONT></I><B>function </B>HttpExtensionProc(<B>var </B>ecb: TEXTENSION_CONTROL_BLOCK):
  39. LongInt; <B>stdcall</B>;
  40. <B>var
  41. </B>  FN_Write: TWriteClientProc;
  42.   s: <B>String</B>;
  43.   len: Integer;
  44. <B>begin
  45. </B>  <I><FONT COLOR="#000099">// Vytvor si funkci pro zapis dat
  46. </FONT></I>  @FN_Write:=@ecb.WriteClient;
  47.  
  48.   <I><FONT COLOR="#000099">// Vytvor si do stringu S odpoved ve formatu HTML
  49. </FONT></I>  s:=  'HTTP/1.0 200 OK'#13#10#13#10;
  50.   s:=s+'<html><head>'#13#10;
  51.   s:=s+'   <title>ISAPI skript</title>'#13#10;
  52.   s:=s+'</head><body bgcolor=white>'#13#10;
  53.   s:=s+'<h1>Generovanß strßnka</h1>'#13#10;
  54.   s:=s+'Tento text je generovan² knihovnou ISAPI v serveru PNWS'#13#10;
  55.   s:=s+'</body></html>';
  56.   len:=Length(s);
  57.  
  58.   <I><FONT COLOR="#000099">// Zapis do prohlizece
  59. </FONT></I>  FN_WRITE(ecb.ConnID, PChar(s), len, 0)
  60.  
  61.   <I><FONT COLOR="#000099">// No a to je asi vse... ...je jasne, ze skript nebude omezen jen na
  62.   // jednoduche splacani neceho do stringu S, ale bude neco konat
  63. </FONT></I><B>end</B>;
  64.  
  65. <I><FONT COLOR="#000099">// Potreba pro export funkci
  66. </FONT></I><B>exports
  67. </B>  GetExtensionVersion,
  68.   HttpExtensionProc;
  69.  
  70. <B>begin
  71. end</B>.</PRE>
  72.    Je jasnΘ, ╛e v∞t╣ina skript∙ pot°ebuje VSTUPN═ data a proto
  73. si ukß╛eme i jak si je od serveru zφstkat. Pro zφskßnφ dat pomocφ metody
  74. po╛adavky GET (tedy skript.dll?data) pou╛ijeme zßznam typu PChar dostupn²
  75. p°es jmΘno <B><TT>ecb.lpszQueryString</TT></B>. Data p°es metodu POST jsou
  76. ulo╛ena v bloku na kter² ukazuje pointer <B><TT>ecb.lpbData</TT></B>. Jejich
  77. velikost je urΦena prom∞nou <B><TT>ecb.cbTotalBytes</TT></B>.
  78. <BR>   Pro zφskßnφ prom∞nΘ od serveru (nap°φklad jmΘno serveru,
  79. Φi typ prohlφ╛eΦe) m∙╛eme do procedury <B><TT>HttpExtensionProc </TT></B>p°idat
  80. nßsledujφcφ vno°enou proceduru:
  81. <PRE><I><FONT COLOR="#000099">// Fuknce vracφ promenou prostredi od serveru 
  82. </FONT></I><B>function</B> GetServerVar(name:string):<B>string</B>;
  83. <B>var</B> FN_GetVariable:TGetServerVariableProc;
  84.     pch:PChar;
  85.     len:integer;
  86. <B>begin
  87. </B>  <I><FONT COLOR="#000099">// Prirazeni procedury
  88. </FONT></I>  @FN_GetVariable:=@ecb.GetServerVariable;
  89.   <I><FONT COLOR="#000099">// maximalni velikost prichozich dat
  90. </FONT></I>  len:=1024;
  91.   pch:=StrAlloc(len);
  92.   <I><FONT COLOR="#000099">// Zeptej se na data
  93. </FONT></I>  <B>if</B> FN_GetVariable(ecb.ConnID,PChar(name),pch,len) <B>then
  94. </B>    result:=pch
  95.   <B>else
  96. </B>    result:='*nedefinovano*';
  97. <B>end</B>;</PRE>
  98.  
  99. </div>
  100.  
  101. <!--#include virtual="/main_footer.inc"-->