Upload funzt nicht - was könnte an CGI.pm falsch sein ?
Torwächter
- perl
0 RoRo
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.
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
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);
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
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