2013-04-23 60 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..

這樣的文件名是更加人性化容易閱讀和進一步處理,如有需要