假设许多用户同时上传他们的照片。那么,我如何为每张图片生成一个唯一的id,而这个id永远无法与其他生成的id相匹配呢?
$uniqId = time().'_'.rand();
或者应该使用。
uniqid();
使用uniqid()
PHP函数可能是最好的方法,因为发送的文件不使用DB。
根据PHP手册:uniqid——生成一个唯一的ID。
"例如,如果您在几个主机上同时生成标识符,而这些主机可能会在同一微秒内生成标识符,这可能会很有用。"
引用自PHP手册
- http://php.net/manual/en/function.uniqid.php
函数uniqid()
每纳秒生成一个不同的id,因此它在大多数情况下都是唯一的。
如果您期望大量用户在共享环境(多台服务器)中同时上传,那么在所有服务器上以相同的纳秒级处理多个请求是非常可能的。
函数接受两个参数来帮助增加结果的唯一性:
- 可以将前缀(第一个参数)设置为服务器名称,以避免跨服务器名称冲突
- "更多熵"(第二个论点)增加了结果是唯一的可能性
例如:
echo uniqid($my_hostname, true);
除了服务器名称之外,您还可以添加其他熵源,如用户id(如果适用)。
如果您使用数据库来跟踪图像,另一种方法是使用(auto_increment)主键,该主键对每一行都是唯一的(因此,数据库会为您处理唯一性)
您可以通过mysql表生成uniqueid。
create table ids(id int auto_increment primary key);
当用户上传他们的图片时,像这样写sql
insert into ids () values();
select last_insert_id();