if ($FORM{'file'} ne "") {
$file = $FORM{'file'};
$OS = $^O; # operating system name
if ($OS =~ /darwin/i) { $isUNIX = 1; }
elsif ($OS =~ /win/i) { $isWIN = 1; }
else { $isUNIX = 1; }
$mylimit = 1024 * $limit;
$mydirlimit = 1024 * $dirlimit;
$fixfile = $file;
$fixfile =~ s/.+\\([^\\]+)$|.+\/([^\/]+)$/$1/;
$fixfile =~ s/[\(\)\$#%+,\/:?"<>'\*\;|@^!]//g; # edit in between [ ] to include characters you dont want to allow in filenames (dont put a . there or you wont be able to get any file extensions).
$fixfile =~ s/ /_/g; # replaces spaces in filenames with a "_" character.
$fixfile =~ s/&//g; # replaces ampersands with nothing.
$fixfile =~ s/\+//g; # replaces + with nothing
$fixfile =~ s~[^/\\0-9A-Za-z#%+\,\-\ \.\:@^_]~~g; # Remove all inappropriate characters.
# replace . with _ in the filename except for the extension
$fixname = $fixfile;
$fixname =~ s/(\S+)(\.\S+\Z)/$1/gi;
$fixext = $2;
$fixext =~ s/(pl|cgi|php)/_$1/gi;
$fixname =~ s/\./\_/g;
$fixfile = qq~$fixname$fixext~;
if ($overwrite == 2 && (-e "$uploaddir/$fixfile")) { &fatal_error("$fatxt{'8'}"); }
if (!$overwrite) {
$fixfile = check_existence($uploaddir, $fixfile);
}
if ($checkext == 0) { $match = 1; }
else {
foreach $ext (@ext) {
chomp($ext);
if (grep /$ext$/i, $fixfile) { $match = 1; last; }
}
}
if ($match) {
if ($allowattach == 1 && (($allowguestattach == 0 && $username ne 'Guest') || $allowguestattach == 1)) {
$upload_okay = 1;
}
} else {
&Preview("
$fatxt{'20'} @ext ($fixfile)")
}
if ($mydirlimit > 0) {
&dirstats;
}
$filesize = $ENV{'CONTENT_LENGTH'} - $postsize;
$filesizekb = int($filesize / 1024);
if ($filesize > $mylimit && $mylimit != 0) {
$filesizediff = $filesizekb - $limit;
if ($filesizediff == 1) { $sizevar = "kilobyte"; }
else { $sizevar = "kilobytes"; }
&Preview("
$fatxt{'21'} $filesizediff $sizevar $fatxt{'21b'}")
} elsif ($filesize > $spaceleft && $mydirlimit != 0) {
$filesizediff = $filesizekb - $kbspaceleft;
if ($filesizediff == 1) { $sizevar = "kilobyte"; }
else { $sizevar = "kilobytes"; }
&Preview("
$fatxt{'22'} $filesizediff $sizevar $fatxt{'22b'}");
}
if ($upload_okay == 1) {
# create a new file on the server using the formatted ( new instance ) filename
if (fopen(NEWFILE, ">$uploaddir/$fixfile")) {
if ($isWIN) { binmode NEWFILE; }
# start reading users HD.
while (<$filename>) {
# print to the new file on the server
print NEWFILE;
}
# close the new file on the server and we're done
fclose(NEWFILE);
} else {
# return the server's error message if the new file could not be created
&fatal_error("$fatxt{'60'} $uploaddir");
}
}
# check if file has actually been uploaded, by checking the file has a size
if (-s "$uploaddir/$fixfile") {
$upload_ok = 1;
} else {
# delete the file as it has no content
unlink("$uploaddir/$fixfile");
&fatal_error("$fatxt{'59'} $fixfile");
}
if ($fixfile =~ /(jpg|gif|png|jpeg)$/i) {
$okatt = 1;
if ($fixfile =~ /(gif)$/i) {
fopen(ATTFILE, "$uploaddir/$fixfile");
read(ATTFILE, $header, 10);
($giftest, undef, undef, undef, undef, undef) = unpack("a3a3C4", $header);
fclose(ATTFILE);
if ($giftest ne "GIF") { $okatt = 0; }
}
fopen(ATTFILE, "$uploaddir/$fixfile");
while ( read(ATTFILE, $buffer, 1024) ) {
if ($buffer =~ /\