【发布时间】:2012-07-27 02:49:43
【问题描述】:
我需要一个函数,在其中我可以使用唯一的字母数字标记制作 url 标记,我会使用 uniqid 但它对于用户喜欢的标记来说太长了,我需要在结尾处取下多少uniqid 字符串,因此它更短,但同时我可以在一秒钟内收到 1000 个请求(因此每毫秒 1 个)。我知道uniqid使用microtime()来计算字符串。
这是否可能,或者我必须使用其他功能。如果我必须使用其他功能,你能告诉我一两个吗?
提前致谢!
【问题讨论】:
-
查看
openssl_random_pseudo_bytes -
我要花多少才能结束,所以...我可以在一秒钟内收到 1000 个请求 - 变量太多,无法很好地回答这个问题。取决于您的服务器负载及其 CPU 容量等。
-
@halfer 你能给我一个建议的答案吗?我的意思是我最后会去掉多少个字符而不让它变得不唯一?
-
最后我会取出多少个字符而不使其不唯一 - 好吧,所有哈希都有冲突(哈希两个不同事物并得到相同的情况结果)。缩短得越多,发生碰撞的可能性就越大。正如您所说,您需要用一个方便用户的长度来权衡它 - 所以可能是 8 个字母数字字符(所以 36^8)?或者,如果您准备使用区分大小写 (62^8)。这仍然是很多 URL - 您需要为每个 URL 查找一个 db 行。
-
@halfer 会回显 substr(uniqid(), 0, 10);对我告诉你的内容足够独特?