What's a good way to create a unique name for an image that my user is uploading?
I don't want to have any duplicates so something like MD5($filename) isn't suitable.
Any ideas?
What's a good way to create a unique name for an image that my user is uploading?
I don't want to have any duplicates so something like MD5($filename) isn't suitable.
Any ideas?
If you actually need a filename (it's not entirely clear from your question) I would use
tempnam()
, which:...and let PHP do the heavy lifting of working out uniqueness. Note that as well as returning the filename,
tempnam()
actually creates the file; you can just overwrite it when you drop the image file there.I'd recommend
sha1_file()
overmd5_file()
. It's less prone to collisions. You could also usehash_file('sha256', $filePath)
to get even better results.as it was mentioned, i think that best way to create unique file name is to simply add time(). that would be like
How big is the probablity of two users uploading image with same name on same microsecond ?
try
This would also help you in tracking the upload time of the file for analysis. or may be sort the files,manage the files.
You could take a hash (e.g., md5, sha) of the image data itself. That would help identify duplicate images too (if it was byte-for-byte, the same). But any sufficiently long string of random characters would work.
You can always rig it up in a way that the file name looks like:
That way the file name looks normal, but it's still unique.
Grab the file extension from uploaded file:
Grab the time to the second:
time()
Grab some randomness:
md5(microtime())
Convert time to base 36:
base_convert (time(), 10, 36)
- base 36 compresses a 10 byte string down to about 6 bytes to allow for more of the random string to be usedSend the whole lot out as a 16 char string:
I doubt that will ever collide - you could even not truncate it if you don't mind very long file names.