Jump to content

[SOLVED] Rename image on upload


alemapo

Recommended Posts

Hi,

I have code which works for image upload and am trying to rename with random name during the move.  I am using md5 to create the new name. Without md5 everything works fine but with md5 I get my new name and it moves correctly but I lose the file extension on the name. Can you see what my problem is as to why I am losing the file extension using md5? I am open to other suggestions to rename the image other than using md5 if necessary. Thanks in advance, Pamela

 

<?php  //function to upload photo

   

function upload_photo()  {

 

//set the file location

$tempname = 'C:/Users/Pamela/Desktop/put_here/'.md5($_FILES['thefile']['name']);

 

//try to move the uploaded file

if(move_uploaded_file($_FILES['thefile']['tmp_name'], $tempname))  {

    print '<p> Your file has been uploaded. </p>';  }

    else  {

print '<p> Your file was NOT uploaded.  </p>';

print ($_FILES['thefile']['error']);  }

  }

  ?>

Link to comment
Share on other sites

 

 

For your answer based on md5(); md5 is encryption that randomizes a key based on supplied information

 

... md5 does not see the .extension as an extension. MD5 see's it as a string. for example

 

$variable = md5($password);

 

if you have variable = md5("picture.jpg");  its going to put picture.jpg out as just a constant string.  That is the reason md5 does not work for this type of scenario.

 

http://us2.php.net/md5  <-- more information on MD5

 

 

Link to comment
Share on other sites

You need to take the extension and then put it back at the md5'd string.

<?php  //function to upload photo
     
    function upload_photo()  {

    // find ext
    $ext = end( explode('.', $_FILES['thefile']['name']) );

      
   //set the file location
   $tempname = 'C:/Users/Pamela/Desktop/put_here/'.md5($_FILES['thefile']['name']) . $ext;
      
   //try to move the uploaded file
   if(move_uploaded_file($_FILES['thefile']['tmp_name'], $tempname))  {
       print '<p> Your file has been uploaded. </p>';   }
    else   {
      print '<p> Your file was NOT uploaded.  </p>';
      print ($_FILES['thefile']['error']);  }
       }
   ?>   

 

This would however, make things a bit harder when retrieving the files/file names

 

 

another easy alternative is to replace the filename with the current timestamp

Link to comment
Share on other sites

Thanks play_.  This solution worked.  I just had to add in the "." as below:

 

$tempname = 'C:/Users/Pamela/Desktop/put_here/'.md5($_FILES['thefile']['name']) . '.' .$ext;

 

I don't think I will have a problem retrieving them since the names will be stored in a database - it doesn't really matter what they are named.  Also, using the timestamp is a little risky since it is a multi-user system and will allow for multiple image uploads at one time it is quite feasible to have duplicates (which would actually write over another image).  I think this will work for me.

Thanks so much for your help!

 

Link to comment
Share on other sites

No prob.

 

for the timestamp, it could be the timestamp, plus a randomly generated # between 0 - 2000 :)

 

 

Keep in mind also that there could be duplicate names with md5 hashed strings as well.

 

if user 'john doe' uploads a file called hello.jpg, and 'jane smith' also uploads a file called hello.jpg, jane's will replace john's. so keep this in mind if you're storing all uploads in the same dir

 

 

anyways, hope that helped. =]

Link to comment
Share on other sites

play_ you said: "Keep in mind also that there could be duplicate names with md5 hashed strings as well."

 

I thought of that after I sent the last reply. I changed it to use the md5 hashed string plus the timestamp. Hopefully that will be good enough!

Thanks again!

:)

Link to comment
Share on other sites

This thread is more than a year old. Please don't revive it unless you have something important to add.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.