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