Php 散列图像名称

Php 散列图像名称,php,hash,sha,Php,Hash,Sha,我正在将图像上传到S3,我希望为每个上传的图像创建一个唯一的名称 我正在使用干预来制作图像: $img = Image::make($file->getRealPath()); $name = hash('sha256', $img); 然后对图像进行散列: $img = Image::make($file->getRealPath()); $name = hash('sha256', $img); 问题是,当我上传同一张图片时,它被赋予了相同的名称 我该如何解决这个问题?您

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

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

$img = Image::make($file->getRealPath());
$name = hash('sha256', $img);
然后对图像进行散列:

$img = Image::make($file->getRealPath());
$name = hash('sha256', $img);
问题是,当我上传同一张图片时,它被赋予了相同的名称

我该如何解决这个问题?

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

$name = com_create_guid();
hash('sha256', $img+time());

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

例如:

$name = com_create_guid();
hash('sha256', $img+time());

你应该试着往里面加点盐。即使附加日期/时间也会给您一个唯一的名称。 干杯

PS(编辑):

首先,我们以“字符串方式”对数据进行编码,以便将时间值连接为字符串

如果您想要额外的“随机性”,请添加用户cookie、用户名等

最终解决方案:

$data=内爆(“”,文件($file->getRealPath())

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

您可以尝试添加一个rand()


试试
$name=hash('sha256',$imgm,false)
这是扩展名吗?我不想用分机。哦,是的。还有uniqid(),它也是一个基本的扩展。使用UUID为上传的文件生成唯一的文件名是很常见的(至少在.NET世界中是如此)。这仍然让他知道将选择相同的随机数。即使是1%,您仍然没有消除他试图解决的问题。图像无法转换为int$data=Image::make($file->getRealPath())->encode('data-url')$name=hash('sha256',$img.strval(time());我的最新编辑不是最佳的,但应该可以工作。还没测试过呢!谢谢,但我不想将图像编码为数据url,使用您的方法将意味着我必须将其编码两次。一个用于保存,另一个用于哈希名称。这就是为什么我说它不是最优的。您可以直接读取它:$data=内爆(“”,file($file->getRealPath());也。。。为什么不使用md5呢。这是更快的,沙。你要处理数百万张照片吗?(担心碰撞?!)如果不是,md5对你来说已经足够好了。