1 2 3 4
<b>Bild an eMail anhängen:</b><br> <input type="file" name="uploadBild" multiple=""><br> <input type="submit" value="Senden" onClick="return validate_form()"> <input type="reset" value="Einträge löschen"></form>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
#!/usr/bin/perl #eMailFormular.pl $Zaehler = 0; if($ENV{'REQUEST_METHOD'} eq 'GET') { $Daten = $ENV{'QUERY_STRING'}; } else { read(STDIN, $Daten, $ENV{'CONTENT_LENGTH'}); } @Formularfelder = split(/&/, $Daten); foreach $Feld (@Formularfelder) { ($Name, $Wert) = split(/=/, $Feld); $Wert =~ tr/+/ /; $Wert =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $Wert =~ s/<!--(.|\n)*-->//g; $Wert =~ s/\;/\,/g; $Wert =~ s/\n/\ /g; $Formular{$Name} = $Wert; } $JetztWert = time(); $JetztZeit = localtime($JetztWert); @Zeit = split(/ +/,$JetztZeit); @Uhrzeit = split(/:/,$Zeit[3]); $Mailprog = "/usr/lib/sendmail"; $MailSubject = "Nadelnachfrage_$Formular{'Vorname'}_$Formular{'Nachname'}"; $SenderVollname = "\"".$Formular{'SenderEmail'}." ".$Formular{'Nachname'}."\""; $SenderMail = $Formular{'SenderEmail'}; $SenderBrowser = $ENV{'HTTP_USER_AGENT'}; $SenderTrueMail2 = $ENV{'REMOTE_HOST'}; $SenderTrueMail = $ENV{'HTTP_FROM'}; $SenderTrueIP = $ENV{'REMOTE_ADDR'}; $Mailtext = $Formular{'Anfrage'}; $Mailtext =~ s/\n/\ /g; $Mailtext =~ s/\r/\ /g; $Mailtext =~ s/\"/\''/g; $Mailtext =~ s///g; # # # $Empfaenger = "Adresse\@Domain.de"; open(MAIL,"|$Mailprog -t") || die; print MAIL "To: $Empfaenger\n"; print MAIL "From: $SenderMail \n"; print MAIL "Subject: $MailSubject\n\n"; print MAIL "Von: $SenderVollname\n"; print MAIL "RIP: ($SenderTrueMail) $SenderTrueIP ($SenderTrueMail2)\n"; print MAIL "Vom: $Zeit[0], $Zeit[2]. $Zeit[1]. $Zeit[4] ( $Uhrzeit[0]:$Uhrzeit[1] )\n"; print MAIL "\n"; print MAIL "$Formular{'Anrede'} $Formular{'Vorname'} $Formular{'Nachname'}\n"; print MAIL "$Formular{'Strasse'}\n"; print MAIL "$Formular{'PLZ'} $Formular{'Ort'}\n"; print MAIL "$Formular{'Vorwahl'}/$Formular{'Telefon'}\n"; print MAIL "$Formular{'Rueckruf'} Uhrzeit $Formular{'Uhrzeit'}\n"; print MAIL "$Formular{'SenderEmail'}\n"; print MAIL "\n"; print MAIL "Art der Anfrage: $Formular{'Betreff'}\n"; print MAIL "DSGVO akzeptiert: $Formular{'Akzept'}\n"; print MAIL "Gegenstand: $Mailtext \n"; print MAIL "Attachement: $Formular{'uploadBild'}\n"; print MAIL "\n"; close(MAIL);
QuoteGeht über ein Formular mit drei Feldern vom Typ file.- Zusendung eines oder mehrerer jpg-Bilder ueber ein eMail-Formular
QuoteÜber die Prüfung des Dateinamens:- Begrenzung der Zusendung auf dieses Format
QuoteDurch die drei Uploadfelder im Formular ist das gewährleistet.- Begrenzung der Zusendung auf 3 Bilder
QuoteVor dem Upload? teilweise nur mit neurem Browser, siehe http://jsbin.com/ulamor/213/edit?html,output- Begrenzung der Bildgroesse auf je 2 MB (muss man ja heute leider einkalkulieren.
QuoteVor dem Upload?...und wenn es ginge, waere eine automatische Bildverkleinerung auf 300 KB noch der
absolute Hit!)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
#!/usr/bin/perl use strict; use warnings; use 5.010; use CGI (); use File::MimeInfo::Magic; sub GetMimeType { my $fname = shift; my $mimetype = File::MimeInfo::Magic::mimetype($fname); return $mimetype; } my @files; my $FORM = <<HTML; <form method="POST" enctype="multipart/form-data"> <!-- hier weitere Felder --> Bild hochladen:<br> Bild 1: <input type="file" name="uploadBild"> <br> Bild 2: <input type="file" name="uploadBild"> <br> Bild 2: <input type="file" name="uploadBild"> <br> <input type="submit" value="Senden" onClick="return validate_form()"> </form> HTML my $cgi = CGI->new; print $cgi->header('text/html'); if ( $cgi->request_method() eq 'GET') { print $FORM; } elsif ( $cgi->request_method() eq 'POST') { @files = $cgi->param('uploadBild'); for my $file (@files) { print "Size: ", (stat($file))[7], " Mime-type: ", GetMimeType($file), '<br>'; } }
2018-08-01T14:31:05 GwenDragonJa, das Parsen der Multparts ist bei CGI.pm etwas grässlich.
Das hast du ja mit deinem Framework bewiesen, dass es anders und sinnvoller geht.
1 2 3 4 5 6 7 8 9 10 11 12 13
[ { "name": "upspot", "value": {}, "filename": "21.04.2003_050.jpg", "type": "image/jpeg", "size": 28088 }, { "name": "jahr", "value": "1912" }, ]
2018-08-01T15:44:03 GwenDragonJa, das Konzept von Objekten is mir auch lieber.
2018-08-01T13:57:54 RaubtierVerwendet man heutzutage noch CGI? CGI.pm war zumindest lange Zeit auch ein Monster, das zwar funktioniert hat und auch besser ist als selbst zu parsen - aber kann man das inzwischen wirklich noch empfehlen? Es gab doch vor etlichen Jahren mal den Vortrag "CGI.pm must die".
2018-08-01T15:57:59 GwenDragon
QuoteFür ein reines CGI-Skript, dass in einem "cgi-bin" Verzeichnis eines vorkonfigurierten Webservers laufen soll, welche Alternativen hat man zu CGI.pm?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
# Public und unabhängig verwendbar # application/x-www-form-urlencoded sub qparse{ my $self = shift; my $rawdata = shift; my %param = (); # Punkte in Parameternamen erlauben my @pie = split /[;&]/, $rawdata; foreach my $p(@pie){ my ($pname, $val) = split(/=/, $p, 2); next unless $pname; next unless defined $val; $val =~ s/\+/ /g; $val =~ s/%([0-9A-Fa-f]{2})/chr(hex($1))/eg; push @{$param{$pname}}, $val; } return \%param; }
2018-08-01T16:21:12 LinuxerIch hak mich hier mal ein:
Ich will kein neues Framework, keinen eigenen Server (außer dem bestehenden Webserver) laufen lassen.
Ich will nur ein einfaches CGI-Skript erstellen, in einer bestehenden Webserver-Konfiguration laufen lassen und dabei das ach-so-böse CGI.pm durch eine Alternative ersetzen. Was sollte ich also dafür nehmen? Da vermisse ich bisher echt die Antworten drauf. Vielleicht habe ich die passenden Seiten auch noch nicht gefunden?