2

假设许多用户一次上传他们的照片。那么我如何为每张永远无法与其他生成的 id 匹配的图片生成唯一的 id。

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

或者应该是使用。

uniqid();
4

3 回答 3

9

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

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

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

引用自 PHP 手册。

于 2013-08-14T07:34:49.570 回答
7

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

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

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

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

例如:

echo uniqid($my_hostname, true);

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

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

于 2013-08-14T07:03:19.097 回答
3

您可以通过 mysql 表生成 uniqueid。

create table ids(id int auto_increment primary key);

当用户上传他们的图片时,这样写sql

insert into ids () values();
select last_insert_id();
于 2013-08-14T07:03:03.430 回答