基于SRC属性的唯一文件名


Unique file name based on SRC attibute

在我的项目中,我有从其他域链接的图像

<img src="http://www.somewhere.com/images/whatever-image.jpg">

我想在本地重新保存一些名称基于其原始src属性的方式,我可以检查以后如果我已经在本地保存了这个图像或没有。我的问题是,当我使用md5()src属性它是唯一的吗?例子:

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

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

MD5在这种情况下使用是相当安全的。快速的哈希时间使得它对加密目的不安全,实际上在这里是一个额外的好处。

表示碰撞的概率,例如:MD5产生碰撞之前有多少个随机元素?

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

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

这样文件名更易于人类阅读,并且在需要时更易于进一步处理

我认为你可以。碰撞仍然可能发生,但可能性很小。

试试SHA1(),它会比MD5()碰撞更少。但是,除非您需要混淆URL,否则根本不需要使用这些散列。只需将字符串保存到数据库中的文本字段中,如果需要,可以运行url_encode()。这样你就可以无限扩展而不用担心碰撞。

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