散列图像名称

时间:2014-06-11 10:26:14

标签: php hash sha

我将图片上传到S3,我希望为每个上传的图片创建一个唯一的名称。

我正在使用干预来制作图片:

$img = Image::make($file->getRealPath());

然后我散列图像:

$name = hash('sha256', $img);

问题是,当我上传相同的图片时,它的名称相同。

我怎样才能解决这个问题?

4 个答案:

答案 0 :(得分:1)

您是否考虑过使用com_create_guid()来创建全局唯一标识符?这将为您提供每个文件的唯一名称。例如:

$name = com_create_guid();

答案 1 :(得分:0)

避免这种情况的最佳方法是为每次上传使用时间戳。 只需使用time()函数将$ img与当前时间戳相结合。

例如:

hash('sha256', $img+time());

答案 2 :(得分:0)

您应该尝试添加盐。即使添加日期/时间也应该为您提供唯一的名称。 干杯!

PS(编辑):

$data = Image::make($file->getRealPath())->encode('data-url'); 

$name = hash('sha256', $data . strval(time()));

首先,我们以"字符串方式对数据进行编码"所以我们可以将时间值连接成一个字符串。

如果你想要额外的"随机性"添加用户cookie,用户名等。

最终解决方案:

$ data = implode('',file($ file-> getRealPath()));

$ name = hash(' sha256',$ data.strval(time()));

答案 3 :(得分:-1)

您可以尝试添加rand()

hash('sha256', $img . rand(1,100) );