2013-04-23 66 views
0

我的项目从其他领域我都像挂唯一的文件名attibute

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

我想基于其原有的SRC属性的方式,我会有些名字本地重新保存稍后检查一下,如果我已经在本地保存了这个图片。我的问题是,当我使用md5()src-attribute是否是唯一的?例如:

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

我可以依靠MD5()在这种情况下?如果不是,这可以如何正确完成?

+0

见http://stackoverflow.com/questions/4032209/is-md5-still-good-足够独特的识别文件 – Rob 2013-04-23 15:55:41

+0

Rob,是的,我知道md5()的问题。仍然在寻找可能性,让我的情况真的很独特。 – Linda 2013-04-23 16:02:31

+0

好的 - 尝试http://php.net/manual/en/function.uniqid.php – Rob 2013-04-23 16:04:03

回答

0

我认为你可以。碰撞仍然可能发生但非常罕见的可能性。

0

尝试SHA1(),它会碰撞少于MD5()。但是,除非需要对URL进行混淆,否则根本不需要使用这些哈希。只需将字符串保存到数据库中的文本字段中,如果需要,可以运行url_encode()。通过这种方式,您可以无限制地缩放而不用担心碰撞。

+0

那些将是一些pritty不整洁的文件名 – Rob 2013-04-23 15:59:38

+0

我不能使用数据库。如果文件已经存在或不存在,这是一种实时检查。我会寻找sha1()。 – Linda 2013-04-23 16:00:56

0

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

+0

如果我不知道它保存的时间戳,我该如何检查文件是否存在? – Linda 2013-04-23 16:04:37

2

MD5在这种情况下使用相当安全。快速哈希时间,这使得它不安全的密码的目的,实际上是一个奖金在这里。

为碰撞的读取例如此的概率:How many random elements before MD5 produces collisions?

在另一方面,你的目的将是足够简单地剥离从源属性值未在文件路径允许那些字符,一世。即

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

这样的文件名是更加人性化容易阅读和进一步处理,如有需要