Не нравятся результаты поиска? Попробуйте другой поиск!
DLE FAQ » Все вопросы » Общие вопросы по PHP » Как минимизировать совпадение в название файлов при заливке?

Как минимизировать совпадение в название файлов при заливке?


     14.09.2020    upload, залив файлов, префикс    Все вопросы » Общие вопросы по PHP    638

вопрос
Добрый день.

У меня возникла вот такая проблемы.

Юзер с сайта добавляет подряд друг за другом новости, делается это с большой скоростью, например за одну минуту он может добавить 2 новости.

На рассмотрение возьмём 2 новости.
Время добавления новостей:
2020-09-14 05:03:55 новость 1
2020-09-14 05:04:29 новость 2

В каждую новость в доп поле тип "галерея изображений" юзер заливает картинки, пронумерованные по порядку, 1.jpg 2.jpg 3.jpg и так далее

В новость 1 он залил 25 картинок
В новость 2 он залил 36 картинок

Проблема вот в чём, когда он заливал файлы во вторую новость, файлу 25.jpg присвоился такой же префикс как и в первой новости, вот так 1600049079_25.jpg, и произошла перезапись файла, в следствии чего в двух новостях мы имеем 2 одинаковых файла с названием 1600049079_25.jpg, а по факту один файл.

На сколько я знаю префикс задаётся в файле engine\classes\uploads\upload.class.php
Верно?)

Там встречается 2 раза строка
$file_prefix = time() + rand( 1, 100 );


Могу ли я rand( 1, 100 ) заменить на rand( 1, 5000 ) ?
Не повлечёт ли это каких либо последствий на работу загрузчика файлов?
А если нет, то насколько ещё можно увеличить диапазон рандома цифр, чтобы минимизировать процент совпадения до нуля?

Ответа пока нет


5 комментариев

lutskboy
Эксперт

lutskboy - 14 сентября 2020 12:10 -

используйте uniqid

Snake
Юзер

Snake - 14 сентября 2020 12:45 -

Ещё на php.net написано:

Внимание
Эта функция пытается создать уникальный идентификатор, но не дает 100% гарантии уникальности.

Snake
Юзер

Snake - 14 сентября 2020 12:22 -

А как?)

Вот так?
$file_prefix = time() + rand( 1, 100 ) + "uniqid(): %s\r\n", uniqid();

Или так?
$file_prefix = time() + rand( 1, 100 ) + uniqid();

P.S. что-то вставка тега code в комментариях не работает.

lutskboy
Эксперт

lutskboy - 14 сентября 2020 13:06 -

$file_prefix = time().'_'.uniqid();

Snake
Юзер

Snake - 14 сентября 2020 13:35 -

Спасибо.

В итоге решил сделать так:
$file_prefix = time() . rand( 1, 999 ) . uniqid();

Чтобы комментировать - войдите или зарегистрируйтесь на сайте

Похожие вопросы

наверх