Я загружаю фотографии сгенерированным хешем md5 для каждого, но иногда повторяется.Предотвращение дубликатов MD5 при загрузке изображений
$rand = rand(0,10000);
$md5 = md5($rand);
Я загружаю фотографии сгенерированным хешем md5 для каждого, но иногда повторяется.Предотвращение дубликатов MD5 при загрузке изображений
$rand = rand(0,10000);
$md5 = md5($rand);
Ну это нормально, что 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
Хорошо, я обновил свой код, похоже, что дубликатов не произошло! Спасибо! –
Рад, что это помогло вам –
Может ли он работать для нескольких загрузок одновременно, например, если я загружу 30 картинок? –
Заменить код с этим по-настоящему уникальных имен хэш (даже в маловероятном случае, что 2 пользователям загружать файлы в то же самое точное микросекунды):
$hash = sha1(mt_rand(0,9999999999).time());
Редактировать: «По-настоящему уникально», я имею в виду, что очень маловероятно, что вы столкнетесь с этим для вашего использования, если только мы не говорим о миллионах изображений ... тогда это может произойти.
Я бы не назвал это поистине уникальным. Очень маловероятно, что произойдет столкновение. –
ну, не нужно понижать. Я добавил объяснение, что столкновение может произойти, однако я думал, что для потребностей op это, скорее всего, будет на 100% уникальным. – peixotorms
Спасибо, я узнал что-то новое! Я тоже попробую! У меня нет огромных загрузок, это будет нормально работать :) –
Почему бы не использовать функцию Php's uniqid для имен?
<?php
$name = uniqid();
Вы назначаете свои изображения в качестве значения md5? –
@ яша ... да да! –
Почему вы не используете 'sha1_file' для генерации хэша SHA1 файла? Ну, если кто-то загрузит один и тот же файл, тогда у вас будет только один файл, но вы можете просто проверить, есть ли более одного файла базы данных для этого файла и удалять только файл, если есть одна запись (которую вы собираетесь для удаления в любом случае). –