我有一个文件共享网站,每个文件都有一个随机ID。 id的示例:G4t68MgW7
每次上传我都会创建一个随机ID,并检查它是否存在(在循环中)。这种方式存在一些问题。
那么如何才能无限制地创建唯一 ID并且不检查它是否已经存在?
注意:我不使用Auto Increment
因为我想避免机器人到达我网站上的每个文件。它在浏览器中的显示方式示例:http://www.example.com/file/G4t68MgW7
答案 0 :(得分:0)
您可以将时间戳值,即time()指定为id。它总是独一无二的
答案 1 :(得分:0)
嗯,你自己或多或少地给出了答案。
使用以下伪代码进行说明:
while (true) {
hash = generate_hash();
SQL -> Check if hash found
if (!found) {
break;
}
}
实现这一点非常容易。生成散列可以是简单的md5,也可以是基于字母数组构建随机字符串的函数。例如,简单的事情:
function generate_hash() {
return '$2y$' . substr(md5(time() . 'foo' . rand(0, 1000000) . 'bar'), 0, 15) . 'ydfdf';
}
在99.999%的情况下,散列将是唯一的,因此性能不应成为问题。这也创造了更多的随机性"比uniqid()
。
答案 2 :(得分:0)
echo substr(uniqid(rand(10,1000),false),rand(0,10),6)
答案 3 :(得分:0)
您可以拥有一个预定义标识符的表格,因此您需要确保它们在创建时间内是唯一的(您不必查询它们是否存在;如果插入失败,只需插入并不执行任何操作) 。如果要上载文件,请获取未使用的代码并将其标记为已使用,以便不再使用。 您还可以使用cron来检查代码是否已用完,并再次运行生成脚本(增加字符数会使代码数量几乎无限制)。由于这是异步的,因此不会影响性能。