2016-01-31 3 views
1

Я загружаю фотографии сгенерированным хешем md5 для каждого, но иногда повторяется.Предотвращение дубликатов MD5 при загрузке изображений

$rand = rand(0,10000); 
    $md5 = md5($rand); 
+0

Вы назначаете свои изображения в качестве значения md5? –

+0

@ яша ... да да! –

+1

Почему вы не используете 'sha1_file' для генерации хэша SHA1 файла? Ну, если кто-то загрузит один и тот же файл, тогда у вас будет только один файл, но вы можете просто проверить, есть ли более одного файла базы данных для этого файла и удалять только файл, если есть одна запись (которую вы собираетесь для удаления в любом случае). –

ответ

2

Ну это нормально, что md5 делает дубликат в вашем случае, если вы выбираете случайное значение betweeen 0,10000, что если случайная величина была дважды 500 тогда ваша md5 воля имеет 2 значения в той же хэш.

вместо этого я хотел бы предложить вам сделать это:

$uniqTime = microtime(); //microtime is the time unix in milliseconds that is the most unique number you can reach, you can use it alone or rehash it, even though I find hashing it to be useless 
    $md5 = md5($uniqTime); // you can use the $uniqTime alone without rehashing it 
+0

Хорошо, я обновил свой код, похоже, что дубликатов не произошло! Спасибо! –

+0

Рад, что это помогло вам –

+0

Может ли он работать для нескольких загрузок одновременно, например, если я загружу 30 картинок? –

0

Заменить код с этим по-настоящему уникальных имен хэш (даже в маловероятном случае, что 2 пользователям загружать файлы в то же самое точное микросекунды):

$hash = sha1(mt_rand(0,9999999999).time()); 

Редактировать: «По-настоящему уникально», я имею в виду, что очень маловероятно, что вы столкнетесь с этим для вашего использования, если только мы не говорим о миллионах изображений ... тогда это может произойти.

+0

Я бы не назвал это поистине уникальным. Очень маловероятно, что произойдет столкновение. –

+0

ну, не нужно понижать. Я добавил объяснение, что столкновение может произойти, однако я думал, что для потребностей op это, скорее всего, будет на 100% уникальным. – peixotorms

+0

Спасибо, я узнал что-то новое! Я тоже попробую! У меня нет огромных загрузок, это будет нормально работать :) –

0

Почему бы не использовать функцию Php's uniqid для имен?

<?php 
$name = uniqid(); 
Смежные вопросы