daniel: Fehler Sucher

Hallöchen,
ich habe das Upload Programm in Perl aus der Forum-Auslese mal ausprobiert. Ich habe es umgeschrieben damit man mehrere Variabeln übergeben kann, also auch noch den gewünschten Pfad. Jedoch ist nach dem Upload die Extension falsch :-( Statt *.txt steht dort *.tx oder statt *.gif steht dort *.gi usw.
Findet jmd. den Fehler ?

Gruß, Daniel
---------------
#!/usr/bin/perl

#binmode STDIN;
#read STDIN, $Daten, $ENV{'CONTENT_LENGTH'};

if($ENV{'REQUEST_METHOD'} eq 'GET')
  {
   $Daten = $ENV{'QUERY_STRING'}
  }
else
  {
   read(STDIN, $Daten, $ENV{'CONTENT_LENGTH'});
  }

@Formularfelder = split(/&/, $Daten);
foreach $Feld (@Formularfelder)  
  {
   ($name, $value) = split(/=/, $Feld);  
   $value =~ tr/+/ /;
   $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
   $value =~ s/<!--(.\n)*-->//g;      
   $Formular[$i] = $name;  
   $i = $i + 1;
   $Formular[$i] = $value;  
   $i = $i + 1;
   $AnzahlFelder = $AnzahlFelder + 1;
  }

for ($i=0;$i<$AnzahlFelder;$i++)
  {
    if("\L$Formular[$i*2]\E" eq "datei")  # Nick-Feld
      {
        $Daten = $Formular[$i*2+1];
      }
    if("\L$Formular[$i*2]\E" eq "pfad")  # Nick-Feld
      {
        $Pfad = $Formular[$i*2+1];
      }

}

@Teile = split /----------------------------.{9}/, $Daten;
@Datei = split /\n/, $Teile[1], 5;
while ($Datei[1] =~ /\/) { $Datei[1] =~ s/^.*\//; }
$Datei[1] =~ s/"//;
chop $Datei[1];
chop $Datei[4]; chop $Datei[4];

open DATEI, ">$Pfad/$Datei[1]";
binmode DATEI;
print DATEI $Datei[4];
close DATEI;

print "Content-type: text/html\n\nUpload vollständig!";

  1. Hi,

    ich habe das Upload Programm in Perl aus der Forum-Auslese mal ausprobiert. Ich habe es umgeschrieben damit man mehrere Variabeln übergeben kann, also auch noch den gewünschten Pfad. Jedoch ist nach dem Upload die Extension falsch :-( Statt *.txt steht dort *.tx oder statt *.gif steht dort *.gi usw.
    Findet jmd. den Fehler ?

    sicher doch :-)
    Fangen wir aber mal lieber oben an:

    #!/usr/bin/perl

    #!/usr/bin/perl -w
    use strict;

    if($ENV{'REQUEST_METHOD'} eq 'GET')

    Nix da. Dies stammt aus SelfHTML, ist aber (sorry, Stefan) komplette Schei*e. Ersetze diesen gesamten Teil durch

    use CGI ':standard';

    if("\L$Formular[$i*2]\E" eq "datei")  # Nick-Feld

    [...]

    Undurchschaubar, was das soll. Ich schätze mal, ein

    my $Pfad = param('pfad');

    liefert das gewünschte Ergebnis.

    @Teile = split /----------------------------.{9}/, $Daten;

    my @Teile, und außerdem richte Dich bitte den Upload betreffend nach

    perldoc CGI

    chop $Datei[1];

    Und hier haben wir die Ursache für Deinen Fehler :-) Du verstehst es, wenn Du

    perldoc -f chop

    liest. Abhilfe zeigt Dir

    perldoc -f chomp

    open DATEI, ">$Pfad/$Datei[1]";

    open ... or die "Kann $Pfad/$Datei[1] nicht schreiben: $!";

    close DATEI;

    ... or die "Kann Datei nicht schliessen: $!";

    print "Content-type: text/html\n\nUpload vollständig!";

    print header, start_html('Upload komplett'), h1('Upload vollständig!'), end_html;

    Merke: Die Zeiten von Perl 4 sind schon ein Weilchen vorbei... wir arbeiten mit Modulen und lexikalischen Variablen :-)

    Cheatah