Генерация случайного имени для загруженного файла

Темы, не касающиеся фреймворка, но относящиеся к программированию в целом.
Ответить
Esigns
Сообщения: 170
Зарегистрирован: 2012.08.21, 11:10

Генерация случайного имени для загруженного файла

Сообщение Esigns »

Есть ли в Yii какой-либо способ генерировать валидные случайные имена для загружаемых файлов, чтобы они не повторялись ?
Или нужно искать в нете/писать функцию для генерации случайной строки?
Esigns
Сообщения: 170
Зарегистрирован: 2012.08.21, 11:10

Re: Генерация случайного имени для загруженного файла

Сообщение Esigns »

Во! Похоже на то что нужно.
Когда искал в интернете, нашел только написанные кем-то громоздкие функции-генераторы. Спасибо.
Аватара пользователя
Beaten_Sect0r
Сообщения: 234
Зарегистрирован: 2011.06.15, 14:58
Откуда: Ярославль
Контактная информация:

Re: Генерация случайного имени для загруженного файла

Сообщение Beaten_Sect0r »

md5_file(); не подходит?
_https://coru.ws
Аватара пользователя
TranceSmile
Сообщения: 562
Зарегистрирован: 2011.06.27, 19:04
Откуда: Украина
Контактная информация:

Re: Генерация случайного имени для загруженного файла

Сообщение TranceSmile »

ну это проверка на одинаковость файла. Тоже хороший способ =)
Изображение
Аватара пользователя
Beaten_Sect0r
Сообщения: 234
Зарегистрирован: 2011.06.15, 14:58
Откуда: Ярославль
Контактная информация:

Re: Генерация случайного имени для загруженного файла

Сообщение Beaten_Sect0r »

TranceSmile писал(а):ну это проверка на одинаковость файла. Тоже хороший способ =)
а чего бы и имя файла не заменять на hesh md5? и файл уникальный и его имя.
_https://coru.ws
Аватара пользователя
snaik
Сообщения: 26
Зарегистрирован: 2012.10.31, 10:08

Re: Генерация случайного имени для загруженного файла

Сообщение snaik »

наверно потому что получение хэша файла (в зависимости от размера, хотя это даже не важно) более ресурсоемкий процесс, нежели получение генерированной строки по значению microtime.
Ходить по воде и разрабатывать программы, следуя спецификации, очень просто… если они заморожены.
— Edward V Berard
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Генерация случайного имени для загруженного файла

Сообщение ElisDN »

Beaten_Sect0r писал(а):а чего бы и имя файла не заменять на hesh md5? и файл уникальный и его имя.
А вдруг двадцать пользователей загрузят один и тот же демотиватор, а потом кто-то один его удалит...
AlTiger
Сообщения: 199
Зарегистрирован: 2012.01.15, 18:37

Re: Генерация случайного имени для загруженного файла

Сообщение AlTiger »

md5( rand(0,2000) . $Image->name . microtime() )

Чтоб уж наверняка ^_^
Аватара пользователя
snaik
Сообщения: 26
Зарегистрирован: 2012.10.31, 10:08

Re: Генерация случайного имени для загруженного файла

Сообщение snaik »

AlTiger писал(а):md5( rand(0,2000) . $Image->name . microtime() )

Чтоб уж наверняка ^_^
То есть вы считаете что microtime() - когда-то, чисто теоретически, даст неуникальное значение? :D (не считая точного момента, чего в принципе быть не может)
Ходить по воде и разрабатывать программы, следуя спецификации, очень просто… если они заморожены.
— Edward V Berard
AlTiger
Сообщения: 199
Зарегистрирован: 2012.01.15, 18:37

Re: Генерация случайного имени для загруженного файла

Сообщение AlTiger »

2 пользователя одновременно сохраняют 2 картинки с одинаковыми файлами. Маловероятно... но все же
mark.moskalenko
Сообщения: 12
Зарегистрирован: 2012.10.09, 18:22

Re: Генерация случайного имени для загруженного файла

Сообщение mark.moskalenko »

Я вот так генерирую имя

Код: Выделить всё

$newName = date('mdyGis') . rand(1, 1000) . '.' . $type; 
Аватара пользователя
timlar
Сообщения: 1382
Зарегистрирован: 2009.09.19, 17:49
Откуда: Украина, Днепропетровск
Контактная информация:

Re: Генерация случайного имени для загруженного файла

Сообщение timlar »

Я такой вариант использую: md5(uniqid(microtime(), true))
Twitter: @timlar_ua
Аватара пользователя
creocoder
Сообщения: 138
Зарегистрирован: 2010.01.24, 05:29
Откуда: Тамбов

Re: Генерация случайного имени для загруженного файла

Сообщение creocoder »

Генерировать случайное имя файла с помощью одного только uniqid() ни в коем случае нельзя. Вот результат работы функции в цикле на достаточно быстрой машине:
  • 51afeff864f9a
    51afeff864f9b
    51afeff864f9c
    51afeff864f9c
    51afeff864f9d
    51afeff864f9e
    51afeff864f9f
    51afeff864fa0
    51afeff864fa0
Как можно увидеть 2 коллизии уже на старте. Генерировать при помощи:

Код: Выделить всё

md5(uniqid(microtime()));
 
Настолько же бессмысленно как и в первом случае, т.к. uniqid() основан на microtime(). Действительно надежный и оптимизированный способ вот:

Код: Выделить всё

md5(uniqid(rand(),true)); 
Но если ресурсы сервера позволяют то способ лучше md5_file() найти сложно. Это не только сэкономит место на сервере при загрузке двух одинаковых файлов, но и гарантирует уникальность на основе содержимого.
Ответить