daniel quappe: fehler bei upload-script-portierung auf win nt 4.0

hi zusammen,

mein problem:
nach der protierung meines perl-upload-scriptes auf eine win32-umgebung (win nt 4.0.)
wird der upload nicht korrekt durchgefuehrt, obwohl dieses script unter unix/linux wunderbar
funktioniert (inkl. speicherplatz-check, max. upload-check etc, allerdings nichts exotisches).
leider kann ich mir in diesem fall das betriebssystem nicht aussuchen und nun steh' ich da...

auf dem nt-rechner laeuft der apache 1.3.9 sowie activeperl (release 613, based on Perl v5.6.0.).
der dateiname wird zwar dort angelegt, wo ich es gerne haette, aber der inhalt ist leer.
(multipart/... ist natuerlich als enctype eingestellt, wie gesagt, auf linux klappt das script)

testweise unter win 95b mit der gleichen kombination von oben entsteht sogar ein "internal
server error" mit der info im error-log "Premature end of script..." und "CGI open of tmpfile:
No such file or directory". hat man sowas schon gesehen...?

der perl-debugger von activestate haengt sich dann auch noch freundlicherweise im CGI.pm-
modul waehrend des debuggens des upload-scriptes auf...welch' hilfe!

nun ja, vielleicht hat ja jemand dieses problem bereits gesehen/geloest oder kann mir
wenigstens eine url nennen, wo ein funktionstuechtiges win32-upload-script verfuegbar ist.
wichtig dabei ist ein binaerer upload. module koennen ggf. nachinstalliert werden.

vielen dank

daniel

  1. Hallo,

    auf dem nt-rechner laeuft der apache 1.3.9 sowie activeperl (release 613, based on Perl v5.6.0.).
    der dateiname wird zwar dort angelegt, wo ich es gerne haette, aber der inhalt ist leer.

    -> Schau Dir mal die folgende Funktion an, insbes. den 2. Kommentar, also prüfe, ob im File-Input auch was drinsteht. Die Funktion versteht sich als Beiepiel, es gehört im gesamten CGI noch ein bischen mehr dazu, wie Fehlerbehandlung, prüfen auf deppische Eingaben usw.; Viele Grüße, Rolf

    ---läuft auf NT---
    sub upload{
    use File::Basename;
    my $source_file = $q->param('upfile');
    my $updir = $q->param('updir');
    my($file_name) = fileparse($source_file);
    my ($size, $xread) = 0;
    open (OUTFILE, ">$updir/$file_name") &noup;

    Binary-Mode einschalten

    binmode OUTFILE;

    guck hier, ob in $source_file auch was drinsteht!

    while($xread = read($source_file, $buffer, 1024)) {
        print OUTFILE $buffer;
    $size += $xread;
    if($size > 1024000){ # Upload begrenzen
      close OUTFILE;
      unlink "$updir/$file_name";
      &zugross; # Ausgabe Fehler, wenn File zu groß ;-)
    }
    }
    close OUTFILE;
    print "Quell - Datei mit Pfad: <b>$source_file, Grö&szlige $size Byte</b>  wurde hochgeladen auf <b>$updir/$file_name</b>";
    &ende;
    }
    ---

    1. vielen dank erstmal fuer die antwort!

      leider kann ich es nicht direkt ausprobieren, da ich momentan arbeiten muss.
      allerdings habe ich bereits gestern gemerkt, dass das programm gar nicht
      in den while-block hineinlaeuft. scheint also nichts in $sourc_file drinzustehen.
      gibt es dafuer ein erklaerung, wenn es wirklich so waere?!

      noch ein paar kleine infos, um deinen auszug richtig zu verstehen:

      • $q wurd mit  $q = new CGI; initialisiert ?
      • fileparse($source_file) ist eine eigene(?) funktion zum parsen des filenames
          oder eine methode von File:Basename (sorry, kenne ich noch nicht...)

      vielen gruesse,

      daniel

      1. Hallo,

        noch ein paar kleine infos, um deinen auszug richtig zu verstehen:

        • $q wurd mit  $q = new CGI; initialisiert ?

        richtig, es geht jedoch auch ohne Objekterstellung mit CGI.PM, siehe
        http://www.i-netlab.de/cgipm/cgi.htm, "use CGI qw/:standard/;"

        • fileparse($source_file) ist eine eigene(?) funktion zum parsen des filenames
            oder eine methode von File:Basename (sorry, kenne ich noch nicht...)

        mit File::Basename, Meth. fileparse kannst du recht einfach die Angaben aus einem kompl. Dateipfad parsen, mögl. Alternative: substr().

        Viele Grüße, Rolf

        1. Hallo nochmal,

          funktioniert dein upload-script (auszug) eigentlich auch mit dem neuesten
          activeperl (release 613, based on Perl v5.6.0) oder mit der perlversion 5.004
          von cpan?
          ich habe naemlich keine problem mehr mit dem cpan-perl, nur mit activeperl.

          gruesse,

          daniel