in reply to Rename Uploaded File

rename "$file_in", "$random_num"."$file_in" or warn "Couldn't rename f +ile: $!\n";

I would put the random number at the end of the file name. Could $file_in have any slashes in it? If it does, then the path you're trying to move it to won't exist.

Also, I would simplify your code by just directly checking to see if the file exists -- no need to iterate through the directory:

if (-e $file_in) { rename($file_in, "$file_in.$random_num"); }

Of course, you probably want to check if "$file_in.$random_num" already exists:

my $f = $file_in; while (-e $f) { $f = "$file_in." . int(rand(100000)); } rename($file_in, $f);

But this doesn't protect you against race conditions - like, what if two people upload the same file at the same time. To protect against that you'll need to find an identifier that uniquely identifies this upload.

Replies are listed 'Best First'.
Re^2: Rename Uploaded File
by Anonymous Monk on Feb 12, 2008 at 20:33 UTC
    But if the file name is file.pdf using this
    rename($file_in, "$file_in.$random_num");
    the new file name will be file.pdf.56786

    Dont you need some regular expression to insert the random number before .pdf ?
Re^2: Rename Uploaded File
by Anonymous Monk on Feb 12, 2008 at 19:56 UTC
    Thanks, for the uniqueness of the files I already have a unique id in the DB.