Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.60/25: Рейтинг темы: голосов - 25, средняя оценка - 4.60
-13 / 2 / 0
Регистрация: 14.08.2014
Сообщений: 240

Как назначить уникальное имя файлу?

04.11.2015, 03:46. Показов 5492. Ответов 31
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Задаю уникальное имя файла при помощи md5($id_будущего_файла_в_таблице.microti me(true));
Какова вероятность повторения md5 хэша? Я понимаю что крайне и крайне мала, но всё же.
И что посоветуете вместо md5? Сразу скажу, насколько я знаю, ЛЮБОЙ тип хэширования допускает коллизии.
И вообще, если хэшировать строку в данном случае глупо, предлагайте свои версии того, как назначить уникальное имя для файла, БЕЗ единого шанса на повторение.

Так как мы тут хардкорщики, я прошу вариант БЕЗ циклов. Слабо?
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
04.11.2015, 03:46
Ответы с готовыми решениями:

Уникальное имя файла
Написал скрипт загрузки файла на сервер с последующим перемещением из временной папки на мой сайт<form...

Как сделать проверку на уникальное имя процесса
Ребят, помогите! Вот код: package processcheker; import java.io.BufferedReader; import java.io.InputStreamReader; public...

Передать имя файла в переменную, если имя каждый раз уникальное и содержит маску
Добрый день. В виду отсутствия информации в поиске, прошу помочь с вопросом по batch. Как передать имя файла в переменную, если имя...

31
1943 / 1768 / 825
Регистрация: 23.01.2014
Сообщений: 6,230
05.11.2015, 08:57
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от AlexBitard Посмотреть сообщение
А, так у вас девушки нет что ли? Если так, я уверяю - не хотел обидеть как либо в этом плане.
Да и вовсе они не обязательны. Попробуйте дружеские отношения. Свобода это удобно!
Я не понимаю - почему Вы все пытаетесь меня задеть как-то? Я Вам что-то плохое сделал?

Тема началась с того, что Вы спросили - как бы задать уникальное имя файла, да так чтобы безо всяких коллизий, чтобы оно 100% не повторялось, на что я Вам дал очевидный и элементарный ответ:
Цитата Сообщение от pav1uxa Посмотреть сообщение
Code
1
2
3
4
5
6
7
8
если создается первый файл
{
* * имя = 0
}
иначе
{
* * имя = имя последнего созданного файла + 1
}
Дальше Вы написали, что надо предусмотреть, если 2 пользователя создадут файл в одну наносекунду (о чем в начале темы Вы не сказали ни слова), но я опять дал вам самый простой и элементарный ответ, который на 100% решает эту проблему:
Цитата Сообщение от pav1uxa Посмотреть сообщение
Можно создать файла какой-нибудь пустой, с названием lock. И перед созданием файла, попробовать открывать его для записи. Если открылся - значит сейчас никто файл не создает, и можно создавать. Иначе - ждать пока будет доступен. Это 100% гарантия
На что Вы сказали "а у меня все фото в свободном доступе и что если подберут название фотки?". О чем, опять же, в первых двух вопросах не было ни слова. Но я опять дал Вам ответ, который целиком решает уже третью проблему:

Цитата Сообщение от pav1uxa Посмотреть сообщение
фотографии можно показывать через скрипт, а папку в которой они лежат вообще закрыть. И в скрипте проверять - авторизован ли пользователь, и тот ли это пользователь кому предназначено фото.
Но Вам опять это не понравилось, по одной простой причине - "а вот у ВКонтакте по другому!".

Но при всем при этом, я Вам оказывается чем-то не угодил, или может быть даже обидел где то... Прямо принцесса какая-то. Я Вас совершенно не понимаю. Вы уже можете спокойно, без эмоций и перехода на личности (не ваше дело есть у меня девушка или нет) составить свой вопрос грамотно и окончательно, при ответе на который не будете говорить - "а мне не так, а вот так хочется". Напоминает бриллиантовую руку - "А у вас нет точно такого же, только без крыльев?" (с)
0
-13 / 2 / 0
Регистрация: 14.08.2014
Сообщений: 240
05.11.2015, 14:18  [ТС]
pav1uxa, Ладно, приятель. Прости. Я действительно нахамил тебе как то. Я не хотел. Настроение просто плохое было.
А сейчас всё классно. Но ты слишком запутанные варианты предлагал, которые совсем не то что мне было нужно.
Я просил просто уникальности имени файла. И прочти нашу ветку диалога с Jodah, он сразу же понял что мне нужно.

И кстати да, ВК для меня - функциональный вдохновитель. Прекрасный сайт в плане функциональности.
Но это здесь совсем не при чём. Тебя что, когда просят новички "Как сохранить пароль в БД?" ты предлагаешь им вариант без хэширования? Если ты тру, думаю твой ответ Нет. Это ведь безопасность которую даже не обсуждают. Так и с именем файла. Явная последовательность имён не практична и не безопасна.

Кстати в целом - клёвый форум. Дизайн конечно жуткий отстой, но в целом отличный инструмент поиска дискуссий.
0
 Аватар для GoDr
90 / 79 / 33
Регистрация: 17.08.2015
Сообщений: 512
Записей в блоге: 1
07.11.2015, 16:58
Читаю тему... бред! Нет, даже не на - БРЕД!!!!!

Я тут новенький на форуме, может обижу кого-то из "авторитетов"...

Уникальность достигается привязкой к последовательности чего-либо: например времени, идентификатора, порядкового номера и т.п. Генерация случайности породит коллизию.

Что касается второго. Повторить MD5 ох как нужно постараться. Не нравится md5 - попробуй sha

Теперь что касается первого. нет ничего лучшего как метка времени.


Не реально (ну если только в лабораторных целях) загрузить несколько файлов в одну и туже наносекунду. Но допустим реально. Тогда может быть прибавить порядковый номер.

Но может возникнуть (опять же не реальная ситуация) проблему при слиянии этих файлов... когда совпало и время и порядковый номер... Тогда можно добавить РАНДОМ.. Если и тут проблема, ну так поставь два РАНДОМА подряд..

У меня есть всего 1 вопрос, как вставлять имя файла в таблицу?
Какой алгоритм?
- Создали ячейку в таблице files (пустую и зануленную? ну кроме естественно поля from указывающее на то для чего этот файл нужен. Для какой новости например)
- Всё, у нас есть ID, теперь апдейтим ячейку name нужными данными?

Или можно как то всё в одно действие сделать?
Очень просто... создай сначала запись в базе, получи ID, а уж потом переименуй файл и сохрани его. Но создавать таблицу и дёргать базу ради уникальности имени файла... (см. последнее слова в первой строке)
0
Эксперт PHP
3900 / 3238 / 1353
Регистрация: 01.08.2012
Сообщений: 10,914
07.11.2015, 18:28
Цитата Сообщение от GoDr Посмотреть сообщение
Что касается второго. Повторить MD5 ох как нужно постараться. Не нравится md5 - попробуй sha
Если ТС не нравится md5 из-за мизерных рисков, зачем предлагать sha с такими же мизерными рисками? Да и изначально задача состоит в исключении возможности повторов. Да, такая ситуация может возникнуть 1 раз из миллиона, но если когда возникнет - придётся разбираться, пытаться воспроизвести ситуацию, шерстить код...
Цитата Сообщение от GoDr Посмотреть сообщение
когда совпало и время и порядковый номер
А как может совпасть порядковый номер? Он ведь на то и порядковый, чтобы не повторяться.
Цитата Сообщение от GoDr Посмотреть сообщение
Тогда можно добавить РАНДОМ.. Если и тут проблема, ну так поставь два РАНДОМА подряд..
Отлично... время, номер, две рандомные строки... можно ещё логин юзера добавить, чтобы уж наверняка... какой-то
Цитата Сообщение от GoDr Посмотреть сообщение
БРЕД!!!!!
Проще уж, как советовали выше, проверять файл на возможность записи. И уж точно проще сохранять информацию о файле в БД, тем более учитывая, что она вполне может в будущем пригодиться.
Цитата Сообщение от GoDr Посмотреть сообщение
создай сначала запись в базе, получи ID, а уж потом переименуй файл и сохрани его.
Собственно, к этому в итоге и пришли.

В общем, громкие слова, но нормального (или хотя бы нового) решения вы не предложили.
1
-13 / 2 / 0
Регистрация: 14.08.2014
Сообщений: 240
07.11.2015, 18:52  [ТС]
Jodah, Хорошо что есть люди которые объясняют выскочкам всё вместо меня.
Всё верно, благодарю.
0
1943 / 1768 / 825
Регистрация: 23.01.2014
Сообщений: 6,230
07.11.2015, 18:56
Цитата Сообщение от GoDr Посмотреть сообщение
Читаю тему... бред! Нет, даже не на - БРЕД!!!!!

Не по теме:

Из бреда тут только Ваш пост. Из которого очевидно, что Вы даже тему целиком не прочитали.

0
 Аватар для GoDr
90 / 79 / 33
Регистрация: 17.08.2015
Сообщений: 512
Записей в блоге: 1
07.11.2015, 20:03
А как может совпасть порядковый номер? Он ведь на то и порядковый, чтобы не повторяться.
Я объснил.. если задачи формируются параллельно, а потом сливаются в одну систему. Теоретически реально совпадение

Собственно, к этому в итоге и пришли.
Создать уникальность имени файла при этом создав дополнительно таблицу и использовать БД вообще??? Это разве оптимально?

В общем, громкие слова, но нормального (или хотя бы нового) решения вы не предложили.
Ах, ну да... извините, здесь своё сообщество со своими правилами.. Но сути не меняет.. Если человек говорит что md5+соль ему мало, то я себе очень плохо могу представить реальное воплощение проекта. Если это теория, то давайте сразу об этом и рассуждать.

Из бреда тут только Ваш пост. Из которого очевидно, что Вы даже тему целиком не прочитали.
Прочитал и внимательно. Проблема вопроса в его постановке. Уникальность имеет два варианта: первый - номер по порядку, второй допустимость совпадений.

Номер по порядку - решений много
- проверяем файлы в папке, делаем +1 и радуемся (нормальные файловые менеджеры да и ОС такое делаю без проблем)
- используем БД (как было сказано в теме). Но создавать БД ради уникальности - не целесообразно. Допустимо, но не целесообразно. Оправдание будет если в таблице буде ещё что-то: описание, автор и т.п. и т.д.

Допустимость совпадений - решений ещё больше.. суть в том на сколько мы можем пойти
- случайное число от 1 до тысячи
- случайное число от 1 до миллиарда
- дата-время
- дата-время+миллисекунды
- дата-время+миллисекунды+имя файла
- дата-время+миллисекунды+имя файла+размер файл
если считать что MD5 32 символа, то [дата-время+миллисекунды] по логике меньше.

Вот и нужно думать что и как использовать. Если одна из миллиона записей не пройдёт, то не велика потеря. В эту погрешность может попасть и разрыв соединения с сервером.

А что касается обсуждений, ну так просто мусолили все возможные варианты. И автор согласился что AUTO_INCREMENT это лучший вариант. Да я не против. Хороший вариант, но супер не оптимальный.

PS
Jodah, Хорошо что есть люди которые объясняют выскочкам всё вместо меня.
Всё верно, благодарю.
Это хамство с Вашей стороны. Вы не знаете кто я такой, не знаете сколько мне лет, не знаете моего опыта. Но при этом позволяете себе переходить "на личности"(!) Мои высказывания касаются только вопроса и темы обсуждения, но никак не человека это написавшего.

Добавлено через 20 минут
...совсем забыл о md5_file() и sha1_file()
Если значения совпадут, то я думаю ничего страшно в перезаписи файлов не будет.. по сути они идентичны
0
1943 / 1768 / 825
Регистрация: 23.01.2014
Сообщений: 6,230
07.11.2015, 20:28
Цитата Сообщение от GoDr Посмотреть сообщение
Прочитал и внимательно.

Не по теме:

Тогда зачем Вы пишете все то, о чем тут уже говорилось?


Цитата Сообщение от GoDr Посмотреть сообщение
Это хамство с Вашей стороны. Вы не знаете кто я такой, не знаете сколько мне лет, не знаете моего опыта. Но при этом позволяете себе переходить "на личности"(!)

Не по теме:

Вы не поверите, но даже обвинение в переходе на личности в сторону данного пользователя тут уже было озвучено :D Возможно нужно еще прочитать несколько раз и еще внимательнее. А потом почитать свои посты и подумать - а чего нового Вы принесли в эту тему?

0
 Аватар для GoDr
90 / 79 / 33
Регистрация: 17.08.2015
Сообщений: 512
Записей в блоге: 1
07.11.2015, 20:52
pav1uxa, да вот не поверишь, хотел об этом сказать что автор вопроса уже извинялся, но что-то не написал.. надеюсь что это просто случайность в высказываниях... Да и адресовано всё же это было конкретному человеку.

..Нового принёс две упомянутые мной функции . Я бы сказал это очень реально. Хотя никогда не использовал их сам, не уверен просто в быстродействии

Не по теме:

PS
извиняюсь что внёс некий негатив.. Знаю что лучшее решение - это сдержанность в любых условиях. Но иногда самолюбие и уважение к себе берёт верх :)

0
Эксперт PHP
3900 / 3238 / 1353
Регистрация: 01.08.2012
Сообщений: 10,914
07.11.2015, 21:07
Цитата Сообщение от GoDr Посмотреть сообщение
Создать уникальность имени файла при этом создав дополнительно таблицу и использовать БД вообще??? Это разве оптимально?
Вы точно полностью прочитали тему? Ведь из этого:
Цитата Сообщение от AlexBitard Посмотреть сообщение
но в то же время зная ID файла, нельзя узнать его имя (человеку который не должен этого знать) в общем то что нужно! В коде не пробовал пока что, но думаю всё получится.
У меня есть всего 1 вопрос, как вставлять имя файла в таблицу?
можно сделать вывод, что человеку нужно не просто создать файл с уникальным именем, но ещё и его название где-то хранить. БД в данном случае самый оптимальный способ.

Цитата Сообщение от GoDr Посмотреть сообщение
Ах, ну да... извините, здесь своё сообщество со своими правилами.. Но сути не меняет.. Если человек говорит что md5+соль ему мало, то я себе очень плохо могу представить реальное воплощение проекта. Если это теория, то давайте сразу об этом и рассуждать.

Не по теме:

Причём здесь правила сообщества? :) У ТС есть конкретная задача, мы предложили возможные варианты, вы назвали всё вышеописанное бредом, но в итоге просто повторили уже озвученные варианты, причём не учитывая информацию, которая выяснилась в ходе дискуссии. Логично, что в ответ вы получили некоторую долю негатива.

0
 Аватар для GoDr
90 / 79 / 33
Регистрация: 17.08.2015
Сообщений: 512
Записей в блоге: 1
07.11.2015, 21:55
Jodah, ну если исходить из первого вопроса что человек хочет чтобы файлы не повторялись. И дальше.. что же вы все упрямо твердите читал ли я тему

Вот давай из цитаты что ты привёл... AlexBitard хочет сделать так чтобы название файла никто не знал и предполагается создать связующую таблицу
SQL
1
2
3
4
5
6
CREATE TABLE `files` (
    `id` INT(11) NOT NULL AUTO_INCREMENT,
    `realname` VARCHAR(200) NOT NULL,
    PRIMARY KEY (`id`)
)
ENGINE=InnoDB;
По сути мы имеем настоящее имя и присвоенное (т.е. AUTO_INCREMENT). Но зачем? Я бы понял если человек хочет скрыть путь к файлу. Вот тогда бы это реально нормальный подход к решению задачи. Т.е. в базе мы формируем реальный путь и случайный который отдаём пользователю. и получим что-то такое
SQL
1
2
3
4
5
6
7
CREATE TABLE `files` (
    `id` INT(11) NOT NULL AUTO_INCREMENT,
    `realpath` VARCHAR(255) NOT NULL,
    `userpath` VARCHAR(255) NOT NULL,
    PRIMARY KEY (`id`)
)
ENGINE=InnoDB;
при этом можно задать параметр жизни ссылки

И теперь про бред. Извините все не так высказался.. Я имел в виду обсуждение изначально не совсем "правильного" вопроса. Просто вспомнилось раньше все спрашивали "как запретить копирование контента со страницы" )))) это из той же области. Теоретически я видел описание проблем коллизии MD5, практически никто не смог проверить

Да ещё автор вопроса просит привести пример "без цикла".. Это как? Алгоритм создания уникального имени подразумевает чтобы не было повтора. microtime() - это уже практически уникально, стоить даже добавить IP в качестве соли или любой RAND и повторить даже теоретически не возможно...
0
07.11.2015, 22:09

Не по теме:

Теоретически повторить возможно все, что имеет конечную длинну :D

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
07.11.2015, 22:09
Помогаю со студенческими работами здесь

Как назначить иконку исполняемому файлу приложения
Как в visual basic поставить иконку exe файлу, что бы не у ярлыка, а самого exe файла была иконка.

Как назначить иконку динамически скомпилированному exe-файлу
Добрый день!! Возник вопрос, я пишу билдер. Все ок Суть : пользователь хочет создать программу с помощью моего билдера, и должен...

Как назначить имя новой переменной в new
Здравствуйте, 1)Функция должна создавать новый объект структуры. struct Wagen { int weight;; char clas; }; Функция: void...

Уникальное имя
Здравствуйте, есть поле группа в таблице, длина которого может составлять 64 символа. Нужно, чтоб все названия групп были разными. Стоит ли...

Дано полное имя файла, т.е путь к файлу, имя и расширение. Выделить из строки только имя первого католога
Помогите пожалуйста!!! Залание: Дано полное имя файла, т.е путь к файлу, имя и расширение. Выделить из строки только имя первого...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
32
Ответ Создать тему
Новые блоги и статьи
Транскрипция 55-минутного видео через Whisper: WhisperDesktop облажался, спас Google Colab[
anaschu 01.06.2026
Понадобилось получить текст из свежезагруженного видео на YouTube. Казалось бы, задача на пять минут. Заняла полтора часа. Делюсь опытом — может кому пригодится последовательность решений. . . .
21 мат мед. Планы на развитие модели здравоСохранения
anaschu 01.06.2026
AnyLogic: план развития симуляционной модели рабочего коллектива — динамический абсентеизм, реальные данные, три сценария сравнения Продолжаю серию постов о дискретно-событийной модели рабочего. . .
20. Мат мед. Абсентеизм как отдельный тип простоя
anaschu 29.05.2026
Апдейт модели: исправленные баги, абсентеизм и новые механизмы Продолжаю развивать ранее описанную модель рабочего коллектива на AnyLogic. За последние несколько дней был проведён серьёзный. . .
19. здоровье, усталость и психотип работника влияют на производительность предприятия, и наоборот, производительность на здоровье, усталось и психотип
anaschu 28.05.2026
Дискретно-событийная модель рабочего коллектива на AnyLogic: здоровье, выгорание, психотипы и микростимуляция Привет, коллеги. Хочу поделиться итогами нескольких недель работы над симуляционной. . .
"Прокси" для последовательного порта
Eddy_Em 28.05.2026
Эту штуку написал я достаточно давно. Но сейчас вот понадобилось настроить датчик грозы, но при этом не отключать его от "метеодемона". Соответственно, надо запустить этот "прокси": метеодемон будет. . .
Рефакторинг программы уравнивания.
Massaraksh7 26.05.2026
Пример по предыдущей записи в блоге. Но, надо заметить, что, во-первых, там оптимизация не только математики, но и работы с базой данных, и с графами, а во-вторых, это ещё не всё.
Использование TThread в Lazarus для математических вычислений.
Massaraksh7 25.05.2026
Производя рефакторинг своих программ на предмет ускорения их работы, обратил внимание на такой аспект, как сокращение времени матвычислений. Дело в том, что приходится работать с большими матрицами. . .
Модель здравосохранения 18. Чем здоровее работник, тем быстрее выгорает
anaschu 24.05.2026
Имитационная модель корпоративного здравоохранения: что показывает математика Сегодня в модели рабочего коллектива на AnyLogic появились три новые механики — выгорание через накопленную усталость,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru