Редактор темы

Реклама
Реклама

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

  • Автор темы Автор темы Bashmak
  • Дата начала Дата начала

Bashmak

PRO Users
Регистрация
25 Фев 2017
Сообщения
642
Рейтинг реакций
90
Баллы
28
1/3
Автор темы
Добрый день.

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

Юзер с сайта добавляет подряд друг за другом новости, делается это с большой скоростью, например за одну минуту он может добавить 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 ) ?
Не повлечёт ли это каких либо последствий на работу загрузчика файлов?
А если нет, то насколько ещё можно увеличить диапазон рандома цифр, чтобы минимизировать процент совпадения до нуля?
 
с большой скоростью, например за одну минуту он может добавить 2 новости
даа, очень большая скорость 😀

Могу ли я rand( 1, 100 ) заменить на rand( 1, 5000 ) ?
Не повлечёт ли это каких либо последствий на работу загрузчика файлов?
А если нет, то насколько ещё можно увеличить диапазон рандома цифр, чтобы минимизировать процент совпадения до нуля?
можешь. ничего плохого не случится. но шанс перезаписи все равно остается. это рандом и шанс 0 никогда не будет
вместо rand() лучше использовать более улучшенную версию - random_int(1, PHP_INT_MAX), тогда будет использованно максимальное значение, которое зависит от версии операционной системы. на 64 битных ос максимальное значение будет 9223372036854775807. этого хватит с большим запасом
для гарантированной уникальности используют GUID либо что-то схожее, но тут это уже перебор
 
Последнее редактирование:
Автор темы
даа, очень большая скорость 😀
Ну типа да, он же это руками всё делает, помимо этого ещё пару полей должен заполнить. 30 сек на одну новость, вполне шустро)

random_int(1, PHP_INT_MAX)
Как я понял и этот вариант не минимизирует шанс до нуля?)

На другом сайте мне посоветовали использовать uniqid
Может как-то так тогда?)
Код:
$file_prefix = time() + random_int(1, PHP_INT_MAX) + uniqid();
 
можно использовать один лишь uniqid(). для загрузки файлов вполне подойдет. ну для верности можно еще добавить рандом. и убрать time() - тут он все равно ничего не решит уже
и т.к. uniqid возвращает строку, то надо склеивать через точку
Код:
$file_prefix = random_int(1, PHP_INT_MAX) . uniqid();
 
Автор темы
можно использовать один лишь uniqid(). для загрузки файлов вполне подойдет. ну для верности можно еще добавить рандом. и убрать time() - тут он все равно ничего не решит уже
и т.к. uniqid возвращает строку, то надо склеивать через точку
Код:
$file_prefix = random_int(1, PHP_INT_MAX) . uniqid();
Спасибо, попробую.

Всё же на всякий случай и time тоже оставлю)
Вот так норм будет работать?
Код:
$file_prefix = time() + random_int(1, PHP_INT_MAX) . uniqid();
 
Автор темы
Или так надо?
Код:
$file_prefix = time() . random_int(1, PHP_INT_MAX) . uniqid();
 
2й вариант, все через точку

Код:
$file_prefix = time() . random_int(1, PHP_INT_MAX) . uniqid();
 
Не проще, пакетно переименовывать картинки?
 
Автор темы
Это не 1.ipg 2.ipg 3.ipg, а 1-слово.ipg

Способов переименования по маске много. Как варик тыц
Не, это не вариант. Доступ на добавление открыт для всех юзеров, они тупо скачивают архивы с других источников, разархивируют и заливают всё так как есть ничего не меняя, и хрен их заставишь) Да и оно и к лучшему, накосячить могут при переименовании.
 

Похожие темы Последние темы Популярные темы

Назад
Сверху