Michael Schröpl: Fileuploadscript

Beitrag lesen

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

Und wenn genau diese Zeichenkette im Inhalt der Datei enthalten ist?

Führe mal selbst so einen Upload durch und gib dabei den Inhalt der Environment-Variablen CONTENT_TYPE aus.
Am Ende dieses Inhalts steht - nach meiner Erfahrung - die Angabe "boundary=" und danach die exakte Zeichenkette zum Trennen der Multipart-Komponenten (also die vielen Minuszeichen und die konkrete neunstellige Zahl) *ohne* die beiden ersten Minuszeichen. (Deshalb: Siehe unten.)

Wenn Du diese Zeichenkette verwendest, etwa mit
    #--------------------------------------------------------------------------
    # Aus der Environment-Variablen CONTENT_TYPE u. a. die Separator-Zeichenkette
    # zwischen den einzelnen Multipart-Komponenten herausschneiden
    (my $boundary = $ENV{CONTENT_TYPE}) =~ s/^.*boundary=(.*)$/\1/;
    #--------------------------------------------------------------------------
    # Die gesamten Eingabedaten unter Verwendung dieser Separator-Zeichenkette
    # in eine Liste von Teilen zerschneiden
    @pairs = split (/--$boundary/, $raw_data);
#--------------------------------------------------------------------------,

dann verwendet das Skript die m. E. beste verfügbare Information über den Multipart-Trenner.

Sollte mal irgend ein komischer Browser eine andere Zeichenkette als Trenner verwenden, würde Dein Skript *dann* auch damit fertig werden.

P.S.: Nicht meine Idee, sondern aus einem mir vor ca. einem Jahr "zugelaufenen" Perl-Skript, das damals offenbar eine Vorstufe des heutigen CGI::-Moduls realisiert hat.