Daniel: Dateiupload mit CGI.pm

Hi.

Ich habe ein Problem mit dem Dateiupload mitHilfe des CGI.pm Moduls.

Sobald die Datei so ca. 100KB gross wird erhalte ich ständig die Fehlermeldung Seite nicht gefunden.

Das hier ist der Quellcode zum Speichern der Datei:

open DAT,'>'.$fname or print 'Error processing file: ',$!;
    binmode $file;
    binmode DAT;
    my $data;
    while(read $file,$data,2097152)
     {
      print DAT $data;
     }
    close DAT;

Ich hoffe mal, dass mir jemand sagen kann, wo mein Fehler liegt.

  1. Hi,

    Ich habe ein Problem mit dem Dateiupload mitHilfe des CGI.pm Moduls.

    entweder schiele ich, oder es deutet absolut nichts an Deinem Code darauf hin, dass Du dieses Modul verwendest.

    open DAT,'>'.$fname or print 'Error processing file: ',$!;

    Klammern, Junge, Klammern! Sieh Dir auch mal

    perldoc perlstyle

    an, auch im Hinblick auf die Leerzeichen hier:

    while(read $file,$data,2097152)

    und die geschweiften Klammern hier:

    {

    Desweiteren wäre es interessant zu wissen, wo/wie/womit Du die einzelnen Variablen initialisiert hast - und selbstverständlich was darin steht.

    Cheatah

    1. Hallo,

      while(read $file,$data,2097152)

      Ausserdem bin ich mir sicher, dass der OP niemals derart grosse Bloecke
      aus der Datei lesen will.

      Gruesse,
       CK

      1. Das war ja nur ein Ausschnitt des Scripts. Hier ist der Rest:

        #!/usr/bin/perl

        Perl-Script von Daniel Cordes (c)2002

        use CGI;
        my $cgi = new CGI;
        $Uploadpfad = "daten/";

        Dateiupload("myfile");
        Dateiupload("myfile2");
        Dateiupload("myfile3");
        Dateiupload("myfile4");
        Dateiupload("myfile5");

        ############################## Sub-Routines ##############################
        @Rubriken1 = $cgi->param('C1');

        sub Dateiupload
         {
          $file = $cgi->param($_[0]);
          $fname = "";
          if($file ne "")
           {
            $Bildnummer++;
            ($Dateiendung) = $file =~ /.(.*)$/s;
            $Dateiname = time.$_[0].".".$Dateiendung;
            $fname = $Uploadpfad.$Dateiname;

        # Dateigrösse einschränken
            #if($ENV{'CONTENT_LENGTH'} > 160000)
            # { print("Datei zu gross"); }

        # Dateiendungen überprüfen
            #my @extensions = qw(xls doc Xls Doc XLS DOC);
            #if(!grep($Dateiendung,@extensions))
            #   { die("Ungültige Dateiendung"); }

        # Speichern der Datei
            open DAT,'>'.$fname or print 'Error processing file: ',$!;
            binmode $file;
            binmode DAT;
            my $data;
            while(read $file,$data,2097152)
             {
              print DAT $data;
             }
            close DAT;
           }
          $Bild{$Bildnummer} = $Dateiname;
         }

        1. Hi,

          Das war ja nur ein Ausschnitt des Scripts. Hier ist der Rest:

          danke. Du versäumst es beim größten Teil Deiner Variablen, diese sauber zu deklarieren, was unter anderem daran liegt, dass Du dies verwendest:

          #!/usr/bin/perl

          anstatt:

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

          my $cgi = new CGI;

          Diesen Code hast Du vermutlich abgeschrieben, richtig? ;-)

          $Uploadpfad = "daten/";

          perldoc -f my
          perldoc perlstyle (Schreibweise von Variablen)

          Dateiupload("myfile");

          Bitte mit führendem "&", wenn es sich um eigene Methoden handelt.

          sub Dateiupload
          {

          perldoc perlstyle (Klammersetzung bei Blöcken)

          $file = $cgi->param($_[0]);

          Tipp: perldoc -f shift
          Und initialisiere die Werte bitte, oder werte ein fehlendes Argument als Fehler aus.

          $Bildnummer++;

          Hier fehlt die Deklaration und Initialisierung. Mit -w und strict wirst Du _viele_ Fehler genannt bekommen...

          #if($ENV{'CONTENT_LENGTH'} > 160000)

          perldoc CGI ($POST_MAX)

          #my @extensions = qw(xls doc Xls Doc XLS DOC);

          perldoc -f lc

          open DAT,'>'.$fname or print 'Error processing file: ',$!;

          Immer noch Klammerung. Siehe auch

          perldoc perlstyle (Klammerung bei Funktionen)

          while(read $file,$data,2097152)

          perldoc CGI (Upload)

          Cheatah