Torwächter: Upload funzt nicht - was könnte an CGI.pm falsch sein ?

Hallo,

Ich habe das Script von hier (Selfhtml) und bekomme aber immer einen 500er.

Scheinbar liegt der Fehler an dieser Zeile:
my $file = $cgi->param("myfile");

Wenn ich das Script so aufrufe (nicht mit Formular) dann schreibt es eine leere Datei, rufe ich es aber mit dem Formular auf kommt der 500er.

Was könnte falsch laufen ?

Es soll für Apache sein.

Hier nochmal der Direktlink zum Script (hier): http://aktuell.de.selfhtml.org/artikel/cgiperl/file-upload/index.htm

Vielen Dank im Voraus.

Greetings
Torwächter

PS: Vielen Dank an Cheata, ich hab den Beitrag nicht mehr gefunden. Ich hab mich nun dazu entschieden die User das File nicht zu senden, sondern es direkt auf meinen Server laden zu lassen.

  1. Hallo,

    ich hab mal ein CGI geschrieben womit Images per Web gemanaged werden
    können, schau mal hier

    http://i-netlab.de/downloads/imgmgr.txt

    Zu Deinem Problem:
    prüf mal ob
    1. das form attr enctype="multipart/form-data" gesetzt
    und
    2. das CGI Object $cgi richtig erstellt wurde

    Siehe auch
    http://i-netlab.de/hints/cgi.htm

    -Rolf

    1. Hallo,

      vielen Dank, die Links haben mir sehr geholfen.
      Nun bin ich sicher, dass CGI.pm richtig funzt.

      Mein Script aber immernoch nicht:

      #!/perl/bin/perl
      use CGI;
      $query = new CGI;
      #------
      $action = "testenv.pl";
      $encoding = "multipart/form-data";
      #------
      print "Content-type: text/html\n\n";
      #------
      print $query->startform(-method=>$method,
                              -action=>$action,
                              -encodingtype=>$encoding);
      print $query->filefield(-name=>'uploaded_file',
                              -default=>'startwert',
                              -size=>50,
                              -maxlength=>80);
      print "<input type='Submit'>";
      print $query->endform;
      #----
      $filename = $query->param('uploaded_file');
      open (OUTFILE,">D:/USERMANGA/testtest.log");
      while ($bytesread=read($filename,$buffer,1024))
      {
         print OUTFILE $buffer;
      }
      close (OUTFILE);

      1. Bei einem anderen Uploadscript (s.u.) kommt dieser Fehler :

        Software error:

        CGI open of tmpfile: No such file or directory

        Das Script: http://home.kamp.net/home/farid.hajji/bv2/ew/cgi-upload.pl.html

        1. Bei einem anderen Uploadscript (s.u.) kommt dieser Fehler :

          Software error:

          CGI open of tmpfile: No such file or directory

          Das Script: http://home.kamp.net/home/farid.hajji/bv2/ew/cgi-upload.pl.html

          Tja, may the source be with you.

          CGI.pm erwartet (unter Windows), daß das Verzeichnis C:\TEMP existiert. Das ist blöderweise hardcoded:

          unless ($TMPDIRECTORY) {
              @TEMP=("${SL}usr${SL}tmp","${SL}var${SL}tmp",
              "C:${SL}temp","${SL}tmp","${SL}temp",
              "${vol}${SL}Temporary Items",
              "${SL}WWW_ROOT");
              unshift(@TEMP,$ENV{'TMPDIR'}) if exists $ENV{'TMPDIR'};

          #
              #    unshift(@TEMP,(getpwuid($<))[7].'/tmp') if $CGI::OS eq 'UNIX';
              # Rob: getpwuid() is unfortunately UNIX specific. On brain dead OS'es this
              #    : can generate a 'getpwuid() not implemented' exception, even though
              #    : it's never called.  Found under DOS/Win with the DJGPP perl port.
              #    : Refer to getpwuid() only at run-time if we're fortunate and have  UNIX.
              unshift(@TEMP,(eval {(getpwuid($<))[7]}).'/tmp') if $CGI::OS eq 'UNIX';

          foreach (@TEMP) {
           do {$TMPDIRECTORY = $_; last} if -d $_ && -w _;
              }
          }

          $TMPDIRECTORY  = $MAC ? "" : "." unless $TMPDIRECTORY;

          ${SL} wird durch den OS-spezifischen Backslash ersetzt.

          Wahlweise kannst Du auch im Environment des Webservers (bzw. global für die gesamte Maschine) die Variable TMPDIR auf dein Temp-Verzeichnis setzen (oder noch einige andere Verrenkungen machen), aber C:\TEMP ist schneller angelegt.

          Alexander