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