Технический сбой

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

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


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

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

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

Юзер с сайта добавляет подряд друг за другом новости, делается это с большой скоростью, например за одну минуту он может добавить 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 - -

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

Snake
Юзер

Snake - -

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

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

Snake
Юзер

Snake - -

А как?)

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

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

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

lutskboy
Эксперт

lutskboy - -

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

Snake
Юзер

Snake - -

Спасибо.

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

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

наверх