Hallo,
ich fummle an der Sache jetzt 2 Tage rum und weiss nicht mehr weiter:
Problem: Will einen http-Formular gesteuerten Fileupload realisieren. Die Standardsyntax ist mit klar:
my $cgi = new CGI;
my $dateiadresse = $cgi->param("dateiadresse");
open (BILD, ">$speicheradresse")or die print "Kann die Bilddatei nicht erstellen: $!\n";
binmode $dateiadresse; #Dateiadresse auf dem Client
binmode BILD;
while(<$dateiadresse>) {
print BILD;
}
close (BILD);
Fakten: Unter meinem Testsystem (Win98, Apache2, ActiveState Perl 5.6) funktioniert es (auch wenn ich das ganze von einem anderen Rechner aus unserem Netzwerk mache). Unter Redhad Linux mit einem unbekannten Perl (das aber das Modul CGI hat) wird die Datei angelegt, es wird aber nichts reingeschrieben.
Nach zwei Tagen Nachdenken ist mir auch klar warum. Mit dem Filehandle <$dateiadresse> kann der Server nichts anfangen da er ja Zugriff auf den Client bräuchte um die Datei auszulesen. Aber warum geht es dann unter Windows? Und warum funktionieren alle Uploadprogramme die man runterladen kann genau auf diese Weise? Es wäre notwendig ein Filehandle das eine Verbindung zwischen Perl und der Clientdatei aufrechterhält anzulegen, aber wie soll das gehen?
Den kritische Codeteil:
while(<$dateiadresse>) {
print BILD;
}
habe ich in den letzten Tagen dauernd permutiert. Die Selfhtml-Variante:
my $data;
while(read $file,$data,1024) {
print DAT $data;
}
geht auch nicht. Auch:
while(<$dateiadresse>) {
binmode LOCAL;
print LOCAL $_;
}
geht nicht.
Keine Ahnung was ich jetzt noch ausprobieren soll.
Kann mit jemand helfen?
Danke
Daniel