我正在尝试使用PHP生成一个唯一的ID,以便在文件系统中存储用户上传的内容时不会发生冲突。目前,以下代码片段负责生成UID:
$id = tempnam (".", "");
unlink($id);
$id = substr($id, 2);
这段代码很丑陋:它在文件系统上创建一个临时文件,然后删除它,只保留所生成字符串的相关部分。
有没有更好的方法来做到这一点,最好不需要任何外部依赖?
非常感谢!
我正在尝试使用PHP生成一个唯一的ID,以便在文件系统中存储用户上传的内容时不会发生冲突。目前,以下代码片段负责生成UID:
$id = tempnam (".", "");
unlink($id);
$id = substr($id, 2);
这段代码很丑陋:它在文件系统上创建一个临时文件,然后删除它,只保留所生成字符串的相关部分。
有没有更好的方法来做到这一点,最好不需要任何外部依赖?
非常感谢!
string uniqid ([ string $prefix [, bool $more_entropy ]] )
获取基于当前时间(微秒)的带前缀的唯一标识符。
USAGE: $id = uniqid(rand(), true);
由于uniqid()和rand()函数都基于当前时间,而且两个调用之间时间变化很小,因此rand()添加的熵几乎没有意义。
只要使用more_entropy
选项,您就不应该在单个服务器上出现碰撞。如果使用集群,请确保在服务器之间包含不同的前缀。
在大多数实际情况下,您需要使用uniqid()。
您可以通过在其后添加一个大的随机数来使其更加“独特”。