基于SRC属性的唯一文件名

时间:2013-04-23 15:52:49

标签: php md5 unique

在我的项目中,我从其他域

链接了图像
<img src="http://www.somewhere.com/images/whatever-image.jpg">

我想在本地重新保存一些名称,基于其原始的src-attribute ,如果我已经在本地保存此图像,我可以稍后检查。我的问题是,当我在 src上使用 md5() - 属性时,它是唯一的吗?例如:

$src = "http://www.somewhere.com/images/whatever-image.jpg"
if (file_exists('local_path'.md5($src)) {
...
}

在这种情况下我可以依赖 md5()吗?如果没有,如何做到这一点?

4 个答案:

答案 0 :(得分:2)

在这种情况下使用MD5非常安全。快速散列时间使加密目的不安全,实际上是一个奖励。

对于碰撞的概率,例如:How many random elements before MD5 produces collisions?

另一方面,为了您的目的,只需从源属性值中删除文件路径中不允许的那些字符就足够了,i。即

$localFileName = str_replace(array('/', ':'), '', $src); //may need to strip '&', too..

这样,文件名更具人性化,并且在需要时更容易进一步处理

答案 1 :(得分:0)

我想你可以。碰撞仍然可能发生,但这种情况非常罕见。

答案 2 :(得分:0)

尝试SHA1(),它会发生小于MD5()的冲突。但是,除非您需要对网址进行模糊处理,否则根本不需要使用这些哈希值。只需将字符串保存到数据库的文本字段中,如果需要,可以运行url_encode()。通过这种方式,您可以无限缩放而无需担心碰撞。

答案 3 :(得分:0)

将当前时间戳添加到路径中。这将确保路径是唯一的。