PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : CGI: Datei Upload



READY
13-05-2003, 08:25
Hallo,

Ich brauche in CGI ein Script, welches eine über ein Formular angegebene Datei auf dem Webserver speichert! Ich habe dazu auch schon ein bisschen gegoogelt, doch alles mag nicht so recht funktionieren. Ich glaube, das dem Script irgendetwas fehlt. Ich selber habe von perl/cgi nicht viel ahnung, mache normalerweise PHP. Doch über CGI scheint beim Web Upload die grösse der Datei keine rolle zu spielen, deshalb brauche ich das. Ok zurrück zum Thema, hier das Script:


--- upload.cgi ---
#!/usr/bin/perl
$daten = $filename ;
while ($daten =~ /\\/) { $daten =~ s/^.*\\//; }
$daten =~ s/"//;

open ( DAT , ">$daten");
binmode $filename;
binmode DAT;
while(read $filename,$data,1024) {
print DAT $data;
}
close DAT;
-------------------

Der Eintrag der error_log:
[Tue May 13 09:16:13 2003] [error] [client 192.168.66.190] Premature end of script headers: /srv/www/cgi-bin/upload.cgi


---- upload.html ----
<html>
<head>
<title>upload test</title>
</head>
<body>
<center>
<form method="post" action="/cgi-bin/upload.cgi" enctype="multipart/formdata">
<input type="file" name="upload"><br>
<input type="submit" value="OK"><br>
</form>
</center>
</body>
</html>
---------------------

Ich hoffe mal, ihr könnt mir da helfen :)

PS: Und .. Wo und wie müsste ich denn den Pfad angeben, wo die Datei gespeichert werden soll, in dem CGI Script?

MfG

hecke2000
13-05-2003, 17:42
hi,

nimm doch ein fertiges script:

http://www.perlscripts.de/pages/Datei_Upload/

tomes
13-05-2003, 19:11
Wenn du POST benutzt musst du die Headergroesse ermitteln.


CGI qw/:standard/;

$laenge = $ENV{'CONTENT_LENGTH'}; # Groesse des Headers
$path = "/var/www/htdocs/tmp/upload"; # Da wo gespeichert wird
@extensions = qw(bmp png gif jpg pdf); # Was fuer welche File's

# Jetzt wird geprueft ob die File dem entspricht was man erlaubt
if($file !~ /^[A-Za-z0-9\.\-_]+?\.([A-Za-z]{3})$/) {
$fehler="Ungültiger Dateiname<br>Bitte benutzen Sie keine Sonderzeichen im Dateinamen";
}else{
$extension = $1;
foreach(@extensions){
if($extension eq $_ ){$a="1";}
}
}
if($a<"1"){ $fehler="Ungültige Dateiendung<br>Es sind nur folgende Dateiformate erlaubt: bmp png gif jpg pdf "; }
# Wenn alles O.K., dann her mit der File
else {
if($laenge<"3145700"){ UPLOAD($file);$fehler="Datei $file erfolgreich upgeloadet";}
else{ $fehler="Datei ist zu gross, nur bis 3 MB zulaessig"}
}
print $fehler;

sub UPLOAD{
open(DAT,">$path/$file") or die 'Error processing file: ',$!;
binmode DAT; # Ist auf UNIX Systemen nicht unbeding notwenig, wird aber empfohlen
while(read $file,$data,1024) { print DAT $data; }
close(DAT);
}

Wenn ich mal Hilfe bei php brauche meld ich mich ;)

T;o)Mes