Alexander Foken: Upload funzt nicht - was könnte an CGI.pm falsch sein ?

Beitrag lesen

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