views:

1194

answers:

2

I'm trying to generate a unique ID in php in order to store user-uploaded content on a FS without conflicts. I'm using php, and at the moment this little snippet is responsible for generating the UID:

$id = tempnam (".", "");
unlink($id);
$id = substr($id, 2);

This code is hideous: it creates a temporary file on the FS and deletes it, retaining only the relevant unique part of the generated string.

Is there any better way to do this, most preferably without any external dependencies?

Thanks much!

+3  A: 

uniqid() is what you're looking for in most practical situations.

You can make it even more "uniq" by adding a large random number after it.

Robert Elwell
+7  A: 
string uniqid ([ string $prefix [, bool $more_entropy ]] )

Gets a prefixed unique identifier based on the current time in microseconds.

USAGE: $id = uniqid(rand(), true);
Xenph Yan
wouldn't hashing it with MD5 actually make it more likely to generate collisions?
nickf
I was just about to say this. Sha1 has less collisions, but there's definitely that issue in hashing. Remember: the longer you make the unique id, and the more times you do something "random" to it, the lower the probability of collision.
Robert Elwell
Actually, I see you're point, you wanted an ID not a token value... EDITED.
Xenph Yan