13. 09. 2007. | #1 |
Predrag Supurović
Grand Master
Datum učlanjenja: 24.01.2006
Lokacija: Užice
Poruke: 791
Hvala: 3
200 "Hvala" u 12 poruka
|
CGI apliakcija u Delphi-ju
Da li je neko radio u Delphiju neku VGI aplikaciju? Imam problem koji nije vezan samo sa CGI.
Naime, kada konzolnoj aplikaciji posaljem sadrzaj preo DOS redirekcije (to je isti princip kako se CGI-ju prosledjuju podaci od web servera), izgleda da Delphi ima probem ako je sadrzaj binaran - cita sadrzaj donekle i onda se zbuni. U mom primeru, kad nadije karakter $1A, Delphi posle njega cita sve bajtove kao da imaju vrednost $1A iako to nije tacno. Ovo mi paviproblem kada imam fileupload koji se prosledjuje CGI-ju napravljenom u Delphiju. Ako se pojavi neki problematican karakter, komunikacija puca, ili sadrzaj bude neispravno procitan. Evo test koda koji ne radikako treba: Kôd:
program cgitest; {$APPTYPE CONSOLE} uses SysUtils, Windows; var Buf: PChar; BufSize: Integer; BufValue : string; Code : Integer; ContentLength : integer; i : integer; inchar : char; InLimit : Integer; function GetEnvVarValue(const VarName: string): string; var BufSize: Integer; // buffer size required for value begin // Get required buffer size (inc. terminal #0) BufSize := GetEnvironmentVariable(PChar(VarName), nil, 0); if BufSize > 0 then begin // Read env var value into result string SetLength(Result, BufSize - 1); GetEnvironmentVariable(PChar(VarName), PChar(Result), BufSize); end else // No such environment variable Result := ''; end; begin // set this to any value greater than zero to limit number of characters read // from input stream. If server stalls on upload, limit this to 1 character // and then increase until it stalls again that way you wil find exact byte // which makes server to stall. InLimit := 0; WriteLn('Content-Type: text/html'); WriteLn; WriteLn ('<html>'); WriteLn ('<body>'); BufValue := GetEnvVarValue ('CONTENT_LENGTH'); Writeln (BufValue); Val (BufValue, ContentLength, Code); if ((inLimit >0) and (InLimit < ContentLength)) then ContentLength := InLimit; WriteLn ('<h1>CGI-TEST</h1>'); WriteLn ('<p>Content length:' + BufValue + '</p>'); if (inLimit > 0) then WriteLn ('<p>Forced read limit: ' + IntToStr (ContentLength) + '</p>'); WriteLn ('</p>'); WriteLn ('<pre>'); for i :=1 to ContentLength do begin read(input, inchar); // Write (IntToHex (Ord (inchar), 2)); Write (inchar); end; WriteLn ('</pre>'); WriteLn ('</body>'); WriteLn ('</html>'); end. Postoji li jos neki nacin da se iz Delphija procitaju podciposlati na standardni ulaz, redirekcijom? Prekopah ceo Internet i nigde nisam nasao da se ovaj problem uopste pominje.
__________________
Peđina beležnica (blog) - www.uzice.net - wireless.uzice.net - www.vokabular.org - www.vodic.net - forum.uzice.net |
13. 09. 2007. | #2 | |
Predrag Supurović
Grand Master
Datum učlanjenja: 24.01.2006
Lokacija: Užice
Poruke: 791
Hvala: 3
200 "Hvala" u 12 poruka
|
Nasao sam nacin da citam binarno sve podatke iresio glavni problem:
Citat:
Kada se podaci citaju preko Input promenijve koja je pokazivac na standradni ulaz u tekst rezimu, onda svec ita (dok je ulaz obican tekst), ali kada se cita binarno, onda cita sve ali prekoci na pocetku (ne)odredjeni broj bajtova... Nikad me nije Delphi ovako iznervirao...
__________________
Peđina beležnica (blog) - www.uzice.net - wireless.uzice.net - www.vokabular.org - www.vodic.net - forum.uzice.net |
|
|
|
Slične teme | ||||
Tema | Početna poruka teme | Forum | Odgovori | Poslednja poruka |
Znate li Delphi i SQL? | dmajkic | Poslovne ponude i zapošljavanje | 7 | 12. 10. 2008. 08:37 |
Apliakcija za streaming | Marko Medojevic | Web aplikacije, web servisi i software | 11 | 03. 10. 2007. 08:17 |
Delphi for PHP | Ilija Studen | Web aplikacije, web servisi i software | 16 | 13. 05. 2007. 12:06 |
Delphi i ModelMaker | oki030 | Programiranje | 0 | 21. 04. 2006. 15:20 |
C++ ili Delphi programer | mega023 | Poslovne ponude i zapošljavanje | 0 | 17. 11. 2005. 20:23 |