By erroneous answer, I mean I always get a value of around 55,300 + or - a little, even thought the directory may only have 4 files totaling 1800 bytes of less. | [reply] |
The problem, as identified by dws and tadman is that the use of File::Find is completely wrong.
The line $File::Find::dir = $upload_dir; is having no effect whatsoever and is not intended for use this way.
When you call find(), you are supplying the base of the subtree that the routine will search. As @ARGV will normally have no contents at all, or at least none that would be useful to you for this purpose, the @ARGV ? @ARGV : '.' almost certainly means that you are searching the subtree starting at '.', which is whatever place in the file system your CGI script is being invoked from. Your ../cgi-bin/ directory perhaps? This would explain why you are getting the same numbers back each time. To correct this, you need to supply the upload directory directly to the find() function.
use File::Find;
my $total_size = 0;
find(sub { $total_size += -s }, $upload_dir );
In the short-term, that may well cure your problem. In the long term, you really should read up on the use of taint, and starting checking that you have at least got something in the $email_address variable before blindly appending it to your upload path.
You should seriously consider reading ovid's CGI programming course and pay special attention to lesson three unless you want your site to be overrun by the worlds script kiddies, because currently you are very vulnerable.
Okay you lot, get your wings on the left, halos on the right. It's one size fits all, and "No!", you can't have a different color.
Pick up your cloud down the end and "Yes" if you get allocated a grey one they are a bit damp under foot, but someone has to get them.
Get used to the wings fast cos its an 8 hour day...unless the Govenor calls for a cyclone or hurricane, in which case 16 hour shifts are mandatory.
Just be grateful that you arrived just as the tornado season finished. Them buggers are real work. | [reply] [d/l] [select] |
Getting closer:
As I stated above the code results in a value of 5856. However I just discovered if I remove the + sign from the += I get the value of the last file uploaded.
use File::Find;
my $total_size = 0;
find(sub { $total_size = -s }, $upload_dir );
For example I upload 4 files of 441, 441, 439, 439 bytes. The result without the + is 439 bytes.
Can you shed any light on this???
Bob
| [reply] [d/l] |
Thanks for the advice. Per your suggestion the code was changed as below. The result was 5856 when it should be 1760(verified).
#! Check Folder Size
use File::Find;
my $total_size = 0;
find(sub { $total_size += -s }, $upload_dir );
if ($total_size > $maxfoldersize) {
print"You have exceded your limit of $maxfoldersize KB for the directory
$email_address \n";
}
#! End of Folder Check
| [reply] |
Thanks for the advice. Per your suggestion the code was changed as below. The result was 5856 when it should be 1760(verified).
#! Check Folder Size
use File::Find;
my $total_size = 0;
find(sub { $total_size += -s }, $upload_dir );
if ($total_size > $maxfoldersize) {
print"You have exceded your limit of $maxfoldersize KB for the directo
+ry
$email_address \n";
}
#! End of Folder Check
| [reply] [d/l] |