我将图片上传到S3,我希望为每个上传的图片创建一个唯一的名称。
我正在使用干预来制作图片:
$img = Image::make($file->getRealPath());
然后我散列图像:
$name = hash('sha256', $img);
问题是,当我上传相同的图片时,它的名称相同。
我怎样才能解决这个问题?
答案 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) );