2016-01-31 66 views
1

我上传与生成MD5哈希每个图片但有时会发生重复。防止复制MD5时上传图片

$rand = rand(0,10000); 
    $md5 = md5($rand); 
+0

您正在命名您的图像作为md5值? –

+0

@яша...是的! –

+1

为什么不使用'sha1_file'来生成文件的SHA1哈希值?那么,如果有人上传相同的文件,那么你只有一个文件,但你可以检查是否有多个数据库条目,并且只有在有一个条目时才删除文件(你要去哪无论如何删除)。 –

回答

2

那么它是正常的MD5正在重复你的情况,如果你betweeen 0,10000选择一个随机值,如果有什么的随机值的两倍500那么你的MD5的意志有2个值相同的散列。

,而不是我建议你这样做:

$uniqTime = microtime(); //microtime is the time unix in milliseconds that is the most unique number you can reach, you can use it alone or rehash it, even though I find hashing it to be useless 
    $md5 = md5($uniqTime); // you can use the $uniqTime alone without rehashing it 
+0

好吧,我已经更新了我的代码,看起来没有重复发生! 谢谢! –

+0

很高兴为您效劳 –

+0

它可以同时用于多个上传,例如,如果我上传30张图片吗? –

0

这个替换您的代码真正独特的哈希名称(即使在万一2个用户在同一确切微秒上传文件):

$hash = sha1(mt_rand(0,9999999999).time()); 

编辑:所谓“真正独一无二的”,我的意思是这是不太可能,你会得到与此冲突为您的使用情况,除非我们正在谈论数百万图像的...那么它可能发生。

+0

我不会称这是真正独特的。发生碰撞的可能性非常小。 –

+0

好吧,不需要downvote。我补充说明可能会发生碰撞,但是我认为对于运营需求,这很可能是100%独特的。 – peixotorms

+0

谢谢我学到了新东西! 我也试试! 我没有巨大的上传,这将很好地工作:) –

0

为什么不使用PHP的uniqid函数的名字呢?

<?php 
$name = uniqid();