一次为每次点击生成一个唯一的ID [重复]

Posted

技术标签:

【中文标题】一次为每次点击生成一个唯一的ID [重复]【英文标题】:generate a unique id for every hit at one time [duplicate] 【发布时间】:2013-08-16 00:19:52 【问题描述】:

假设许多用户同时上传他们的照片。那么如何为每张图片生成一个唯一的 id,它永远不会与其他生成的 id 匹配。

$uniqId = time().'_'.rand();

或者应该使用。

uniqid();

【问题讨论】:

我在本地主机上,所以无法检查唯一的 id ......这是否也最适合纳秒内的每次点击?? 您也可以使用服务器的 UNIX 时间戳,这是不一样的。和/或mt_rand() - 我有时会同时使用两者。 考虑使用uuid 如果你在数据库中存储图片的信息,我会使用自增id。 @PuzzledBoy 那么sha1 - uniqid - mt_rand$file_id = md5(rand(1, 7) . rand(1, 4) . rand(1, 6)); 之类的组合呢 【参考方案1】:

使用uniqid() PHP function 可能是您最好的方法,因为发送的文件不使用数据库。

根据 php 手册:uniqid — 生成唯一 ID。

“可能很有用,例如,如果您在多个主机上同时生成标识符,而这些主机可能恰好在同一微秒内生成标识符。”

Quoted from the PHP manual.

http://php.net/manual/en/function.uniqid.php

【讨论】:

【参考方案2】:

uniqid() 函数每纳秒生成一个不同的 id,因此它在大多数情况下都是唯一的。

如果您希望大量用户在共享环境(多台服务器)中同时上传,那么很有可能在所有服务器上以同一纳秒处理多个请求。

该函数接受两个参数来帮助增加结果的唯一性:

    可以将前缀(第一个参数)设置为服务器名称以避免跨服务器名称冲突。 “更多熵”(第二个参数)增加了结果唯一的可能性。

例如:

echo uniqid($my_hostname, true);

除了服务器名称之外,您还可以添加其他熵源,例如用户 ID(如果适用)。

如果您使用数据库来跟踪图像,另一种方法是使用 (auto_increment) 主键,该主键对于每一行都是唯一的(因此,数据库会为您处理唯一性)

【讨论】:

你可以提一下如何使用uniqid()的两个函数参数来使结果更加独特。 好点,我加了。谢谢! 我已经重新格式化了您的答案以使其更具可读性,但请随意更改为您的喜好:)【参考方案3】:

可以通过mysql表生成uniqueid。

create table ids(id int auto_increment primary key);

用户上传图片时,这样写sql

insert into ids () values();
select last_insert_id();

【讨论】:

感谢您的回答。但请再次阅读我的问题,这里没有任何 MySql 或插入查询相关的问题描述...我只想在纳秒内创建 pic 的名称..thannx

以上是关于一次为每次点击生成一个唯一的ID [重复]的主要内容,如果未能解决你的问题,请参考以下文章

MySQL 5.6 GTID Replication

GTID

生成唯一的产品 ID [重复]

C ++生成唯一ID [重复]

PHP uniqid 高并发生成不重复唯一ID

PHP uniqid 高并发生成不重复唯一ID