![]() |
Mit Indy (TIdFTP) Script hochladen klappt nicht
Hallo,
ich möchte mit Indy (TIdFTP) ein Perl-CGI-Script auf meinem Webserver hochladen. Das klappt auch. Die Datei ist da, nur wenn ich sie über den Browser aufrufe erscheint die Meldung "Premature end of script headers". Wenn ich das Perl-CGI-Script mit einem FTP-Programm hochlade, wird sie einwandfrei ausgefürt. Was macht das FTP-Programm anders als Indy?
Delphi-Quellcode:
IdFTP1.Connect;
IdFTP1.TransferType := ftASCII; IdFTP1.Put(FileName, '\cgi-bin\meinscript.cgi'); IdFTP1.Disconnect; |
AW: Mit Indy (TIdFTP) Script hochladen klappt nicht
Und wenn Du die Datei einmal binär überträgst?
|
AW: Mit Indy (TIdFTP) Script hochladen klappt nicht
Zitat:
Delphi-Quellcode:
Bei der ersten Zuweisung von TransferType wird Code im Setter noch nicht ausgeführt. Erst in der zweiten Zuweisung. Denn wenn man IdFTP1.TransferType := ftASCII; weglässt, kann das Script nicht ausgeführt werden.
IdFTP1.Connect;
IdFTP1.TransferType := ftASCII; IdFTP1.TransferType := ftBinary; IdFTP1.Put(FileName, '\cgi-bin\meinscript.cgi'); IdFTP1.Disconnect; Was noch komischer ist: Überall steht, dass man Perl-CGI-Scripte als ASCII übertragen soll, da sonst die Zeilenübrüche defekt sind und das Script nicht ausgeführt werden kann. Hier muss ich es aber als binär übertragen, damit es läuft. Hat jemand Vermutungen was hier los ist? |
AW: Mit Indy (TIdFTP) Script hochladen klappt nicht
Deine Script-CGI-Datei ist aber nicht zufälligerweise Unicode? :-)
|
AW: Mit Indy (TIdFTP) Script hochladen klappt nicht
Zitat:
Es sei, man stellt es anders ein:wink: Zitat:
Gruss alfold |
AW: Mit Indy (TIdFTP) Script hochladen klappt nicht
Zitat:
Allerdings, wenn man eine Unicode-codierte Datei mit Ascii-Encoding hochschiebt, kann das durchaus die Datei zerstören. Andere Clients erkennen u.U. trotz eingestelltem ASCII-Transfer, dass eine Datei Unicode ist und schieben sie dann binär hoch (SmartFTP macht das z.B.) Und das ist auch richtig, Unicode-Dateien sollte man nicht mit ASCII-Transfer hochladen, das gibt Verwurschtelungen. |
AW: Mit Indy (TIdFTP) Script hochladen klappt nicht
Zitat:
|
AW: Mit Indy (TIdFTP) Script hochladen klappt nicht
Kann gut sein...wenn man sich den Quellcode von der idFTP ansieht, sind da ein paar merkwürdige Sachen mit dem Encoding...
Schickst du an den Server vorher ein "FEAT"-Command? Da scheint Indy dann das Default Encoding für den String-I/O-Handler auf UTF8 zu stellen:
Delphi-Quellcode:
hm...
IOHandler.DefStringEncoding := enUTF8;
Versuche doch mal, die Datei nicht über die Angabe eines Dateinamens im put-Befehl hochzuschieben, sondern mach die Datei vorher über einen TFileStream auf und übergib den an put. |
AW: Mit Indy (TIdFTP) Script hochladen klappt nicht
Ich hab den Fehler in der IdFTP.pas gefunden:
Delphi-Quellcode:
Wenn die markierte Zeile nicht verschoben wird, setzt SendTransferType immer den vorherigen FTransferType und nicht den aktuellen.
procedure TIdFTP.SetTransferType(AValue: TIdFTPTransferType);
begin if AValue <> FTransferType then begin FTransferType := AValue; //von unten nach hier verschoeben if not Assigned(FDataChannel) then begin if Connected then begin SendTransferType; end; //FTransferType := AValue; //muss nach oben end; end; end; |
AW: Mit Indy (TIdFTP) Script hochladen klappt nicht
Verwendest Du eine ältere Version von Indy?
Bei mir (mit DXE mitgeliefertes Indy 10) steht nämlich schon:
Code:
procedure TIdFTP.SetTransferType(AValue: TIdFTPTransferType);
begin if AValue <> FTransferType then begin if not Assigned(FDataChannel) then begin if Connected then begin SendTransferType(AValue); end; FTransferType := AValue; end; end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:28 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz