I\'ve a submit discussion form with image upload in my website. Now, I want to upload a unique file name when the user submits their image so that I can show the result of a
The best option IMO would be to to use sha1_file It will create a unique hash based on the file contents. This would only collide if its the same image or a hash collision which is a 1 in 2^160 chance. You can avoid having duplicate images this way however because you are creating a hash from the file it can be slower.
$filename = sha1_file($upload_file) . $ext;
Another option is tempnam It will create a temp file with a unique name.
Note: If PHP cannot create a file in the specified dir parameter, it falls back on the system default.
Basic example:
$filename = tempnam($dir, $prefix);
unlink($filename)//we don't need the tempfile just the name
Also note: If you change the filename it might not be unique.
You could use a timestamp in the date, that way you won't get the same filename/time twice.
Not certain exactly what your code looks like but you could do something like this:
$filename = uniqid() . $orig_filename;
Read this documentation on the PHP docs about uniqid for more information. It uses the datetime to output a unique identifier string.
I think the simplest way would be to store the image name in a database field and then when the user is uploading their image to validate that the file name is unique by checking it against existing filenames. You can use an ajax / jquery interface if you don't want the user to have to wait til the form has been submitted to get an error or prompt to change their filename.
If you need a unique name, you can use uniqid.
$filename = uniqid() . '.jpeg';
Be warned though that it will only be unique across one machine, ie it can generate the same thing if you run it at the very same time on two different machines.
You can use the uniqid()
function to generate a unique ID
/**
* Generate a unique ID
* @link http://www.php.net/manual/en/function.uniqid.php
* @param prefix string[optional] <p>
* Can be useful, for instance, if you generate identifiers
* simultaneously on several hosts that might happen to generate the
* identifier at the same microsecond.
* </p>
* <p>
* With an empty prefix, the returned string will
* be 13 characters long. If more_entropy is
* true, it will be 23 characters.
* </p>
* @param more_entropy bool[optional] <p>
* If set to true, uniqid will add additional
* entropy (using the combined linear congruential generator) at the end
* of the return value, which should make the results more unique.
* </p>
* @return string the unique identifier, as a string.
*/
function uniqid ($prefix = null, $more_entropy = null) {}