我將圖像上傳到S3,我希望爲每個上傳的圖像創建一個唯一的名稱。散列圖像名稱
我使用的干預,使圖像:
$img = Image::make($file->getRealPath());
然後我散列圖像:
$name = hash('sha256', $img);
問題是,當我上傳了相同的圖像,它給了相同的名稱。
我該如何解決這個問題?
我將圖像上傳到S3,我希望爲每個上傳的圖像創建一個唯一的名稱。散列圖像名稱
我使用的干預,使圖像:
$img = Image::make($file->getRealPath());
然後我散列圖像:
$name = hash('sha256', $img);
問題是,當我上傳了相同的圖像,它給了相同的名稱。
我該如何解決這個問題?
你應該儘量鹽添加到它。即使追加日期/時間應該給你一個獨特的名字。 乾杯!
PS(編輯):
$data = Image::make($file->getRealPath())->encode('data-url');
$name = hash('sha256', $data . strval(time()));
首先我們編碼在「字符串的方式」中的數據,所以我們可以連接的時間價值爲字符串。
如果你想額外的 「隨機性」 添加用戶的cookie,用戶名等
最終的解決方案:
$數據=破滅( '',文件($文件 - > getRealPath())); ()()()()());
您能告訴我一個如何做到這一點的例子嗎? – user3729576
$ data = Image :: make($ file-> getRealPath()) - > encode('data-url'); $ name = hash('sha256',$ img。strval(time())); – Cucu
我最近的編輯不是最佳的,但應該工作。沒有測試過! – Cucu
您是否考慮過使用com_create_guid()來創建全局唯一標識符?這會爲您提供每個文件的唯一名稱。例如:
$name = com_create_guid();
這是一個延伸?我寧願不使用擴展名。 – user3729576
哦,是的。還有uniqid()http://www.php.net//manual/en/function.uniqid.php這也是一個基本的擴展。使用UUID爲上傳文件生成唯一的文件名是很常見的(至少在.NET世界中)。 – user2444499
避免這種情況的最佳方法是使用每個上傳的時間戳。 只需使用time()
函數將$ img與當前時間戳結合即可。
例如:
hash('sha256', $img+time());
無法將圖像轉換爲int – user3729576
你可以嘗試添加蘭特()
hash('sha256', $img . rand(1,100));
這仍然給他的danager,相同的隨機數將被選中。 即使它的1%,你仍然沒有消除他正試圖解決的問題。 –
嘗試'$名稱=散列( 'SHA256',$ IMGM,假)' – SJD