|
-13 / 2 / 0
Регистрация: 14.08.2014
Сообщений: 240
|
|
Как назначить уникальное имя файлу?04.11.2015, 03:46. Показов 5262. Ответов 31
Метки нет (Все метки)
Задаю уникальное имя файла при помощи md5($id_будущего_файла_в_таблице.microti me(true));
Какова вероятность повторения md5 хэша? Я понимаю что крайне и крайне мала, но всё же. И что посоветуете вместо md5? Сразу скажу, насколько я знаю, ЛЮБОЙ тип хэширования допускает коллизии. И вообще, если хэшировать строку в данном случае глупо, предлагайте свои версии того, как назначить уникальное имя для файла, БЕЗ единого шанса на повторение. Так как мы тут хардкорщики, я прошу вариант БЕЗ циклов. Слабо?
0
|
|
| 04.11.2015, 03:46 | |
|
Ответы с готовыми решениями:
31
Уникальное имя файла Как сделать проверку на уникальное имя процесса
|
|
16 / 16 / 10
Регистрация: 24.01.2014
Сообщений: 187
|
||||||
| 04.11.2015, 10:42 | ||||||
|
Ну вот например несколько вариантов
0
|
||||||
|
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,904
|
||||||
| 04.11.2015, 11:06 | ||||||
0
|
||||||
|
1943 / 1768 / 825
Регистрация: 23.01.2014
Сообщений: 6,230
|
||||||
| 04.11.2015, 17:22 | ||||||
|
А еще можно уникальное имя файла так задать:
0
|
||||||
|
-13 / 2 / 0
Регистрация: 14.08.2014
Сообщений: 240
|
|||
| 04.11.2015, 17:58 [ТС] | |||
|
Jodah, Интересно. Насчёт логики, 1й пользователь загружает файл в микро 32 секунды, второй в 33. Если в 32 кто то уже загрузил, добавляем 1, тогда тот кто в 33 загрузил, не будет иметь проблем и тоже тупо добавит 1 А если в 32 загрузили 5 пользователей? 1й назовёт файл 32, второй - 33, 3й - 33, 4й - 33, 5й - 33 А всё потому что нет цикла. Но как я и сказал он здесь и не нужен. Так вот, это - тоже ведёт к возможности неожиданного результата. Есть ли способ, при котором не возможно в принципе создать 2 одинаковых имени? Если нет, то есть ли хотя бы нано таймер? Ну и если вам, ребята, слабо, буду использовать циклы при повторении имени. Только подскажите какой лучше, while? И если сейчас php такого не умеет, скажите, как логичнее преобразовывать имя файла загруженного в то же время? Прибавить 1 единицу времени? Добавить рандомный символ? Но я всё же надеюсь что кто то скажет как дать абсолютно уникальное и неповторимое имя. Добавлено через 21 минуту Был файл pisun_tryasun1234 Загружаем файл "Моя звезда", и техническое имя файла pisun_tryasun12341 Следующий файл pisun_tryasun123411 Если это делать цифрами, например текущий последний файл 54, следующий 55, потом 56, но это позволяет всем проходящим мимо открывать любой пользовательский файл без каких либо проблем. Например я знаю что все файлы хранятся в папке /upload/user_files И я свободно вбиваю /upload/user_files/1(~99999999).jpg(ну или любой другой тип) и смотрю что выпадет. Таким образом я могу шариться в файлах и мне удобно. Концепция неплохая, это действительно уникальное имя будет. Всегда! Даже если в одну и ту же нано секунду были отправлены запросы, чей то обработается первее, имя файла задастся, а имя следующего файла будет отталкиваться от предыдущего загруженного. Очень даже неплохо. Только конечно при условии что php не способен обработать 2 абсолютно одновременно пришедших запроса. Тогда они оба получили бы одно и то же имя. Что вообще вызвало бы крах всей логики. Но насчёт этого я ничего незнаю и утверждать не берусь. Поверю на слово. Можно ли как нибудь эту концепцию применить безопасно? На уме только +1.$rand_line_long_8 но тогда имена файлов выглядели бы странновато конечно XD 1e8r79gt92n 223r7t68g31 3w34yoier9y 4rfsdnrhtiog 5sdkltjm4tt0 Ну или не рандомную строку, а как раз microtime(true). Какие мысли насчёт имени и что важнее всего, что насчёт обработки данных php? Интересно уж очень стало насчёт того как php обрабатывает запросы. Пришло 2 запроса в одну и ту же долю секунды. Без единого различия, что php будет делать? Зависнет? Выполнит по очереди? Выполнит их одновременно?
0
|
|||
|
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,904
|
|
| 04.11.2015, 17:59 | |
Сообщение было отмечено AlexBitard как решение
Решение
AlexBitard, добавлять в БД, брать оттуда сгенерированный уникальный id и подставлять, тогда точно двух одинаковых не будет.
1
|
|
|
1943 / 1768 / 825
Регистрация: 23.01.2014
Сообщений: 6,230
|
||
| 04.11.2015, 18:10 | ||
![]() Можно создать файла какой-нибудь пустой, с названием lock. И перед созданием файла, попробовать открывать его для записи. Если открылся - значит сейчас никто файл не создает, и можно создавать. Иначе - ждать пока будет доступен. Это 100% гарантия, но это уже перебор.
1
|
||
|
-13 / 2 / 0
Регистрация: 14.08.2014
Сообщений: 240
|
||
| 04.11.2015, 18:10 [ТС] | ||
|
Jodah, Хорошо, но как ты себе это представляешь?
Для того что бы добавить 1 файл, мы проводим ряд стандартных мер что бы нам не подсунули чего, добавляем в БД БЕЗ уникального имени, id генерируется, мы ЧИТАЕМ эту запись, достаём id и апдейтим? Если так, то ты конечно садист. Я бы с тобой не связывался. Мало ли что. Но идея с идентификатором тоже хороша и я думал об этом. Можно впринципе доставать id последней записи и прибавлять 1, не проще ли? Но здесь я тоже чувствую, есть шанс непредвиденного выполнения. Какой, не знаю пока что. Думаю. Эта мысль опять же толкает на вопрос
Ведь даже если рандомные строки или время сойдутся - id всегда уникальное значение.
0
|
||
|
1943 / 1768 / 825
Регистрация: 23.01.2014
Сообщений: 6,230
|
||
| 04.11.2015, 18:10 | ||
|
0
|
||
|
-13 / 2 / 0
Регистрация: 14.08.2014
Сообщений: 240
|
|||
| 04.11.2015, 18:16 [ТС] | |||
, это совсем уж жуткий хардкор.Для них поясню, мы тут пытаемся найти способ генирации уникального имени, без даже крошечных шансов на неожиданный результат. Даже при сверх огромных нагрузках и неадекватных пользователях любящих "погрузить".
0
|
|||
|
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,904
|
||
| 04.11.2015, 18:22 | ||
|
Делаем insert, затем mysql_insert_id возвращает сгенерированный идентификатор, который можно использовать как имя.
0
|
||
|
1943 / 1768 / 825
Регистрация: 23.01.2014
Сообщений: 6,230
|
|
| 04.11.2015, 18:24 | |
|
0
|
|
|
-13 / 2 / 0
Регистрация: 14.08.2014
Сообщений: 240
|
|||
| 04.11.2015, 18:31 [ТС] | |||
|
Она показывает вам своё тело или кидает картинку ключа для активации игры в стиме. Если имя файла следует закономерности и просто прибавляет 1 - я, интересующийся парнишка, возьму и пройдусь брутфорсом по сайту. Буду искать от 1, до 999999 .jpg например. И что случится, знаете? Я найду приватное фото вашей подруги, которое предназначалось вам. А потом найду картинку с ключём активации и активирую игру, которую вы решили отложить на потом. А если бы имя файла было независимым, например ($id+1).microtime(true) я бы не смог его так вот запросто подобрать. Да и вообще не факт что смог бы подобрать. А вы в свою очередь могли бы без проблем и опасений скопировать ссылку на изображение вашей подруги и отправить его приятелю или в модельное агенство и они не смогли бы заменив одну, две цифры посмотреть предудущие или следующие за этим изображения в вашей переписке. Добавлено через 7 минут Но скажите, не проще ли взять последний ID из БД и добавить 1? Или ваша версия как то гарантирует то, что этот ID точно будет самым последним на момент добавления?
0
|
|||
|
1943 / 1768 / 825
Регистрация: 23.01.2014
Сообщений: 6,230
|
||
| 04.11.2015, 18:38 | ||
|
Не по теме: На самом деле то, о чем тут говорится, мало применимо в реальной жизни. Это просто болтология. Представьте себе метеорит с неба летит, а Вы погулять выходите. И он Вам на голову падает. Значит нам всем нужно срочно подумать и решить - что же сделать чтобы на 100% обезопасить себя от метеорита!? Может быть на улицу вообще не выходить? У кого какие варианты?
0
|
||
|
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,904
|
|
| 04.11.2015, 18:39 | |
|
0
|
|
|
-13 / 2 / 0
Регистрация: 14.08.2014
Сообщений: 240
|
|||
| 04.11.2015, 18:54 [ТС] | |||
|
Регистрация бесплатна, ссылки вида https://pp.vk.me/c628728/v6287... OUKpVg.jpg Не по теме: Магия, скажете вы, как заядлый скептик. "Вовсе нет", возражу я, "код написанный эксплуатируемыми смертными. Такими же как и мы с вами" Так вот, в принципе я и сам уже показал вам, как добавить Вашему способу безопасности в плане подбора. Добавить чего то непредсказуемого после уникальных символов. Понимаете? Решение уже готово. Вопрос теперь только в том, насколько рабочее ваше решение. И как это всё сделать максимально эстетически приятным для глаза Добавлено через 8 минут Удостоверившись в том что это нормальный файл, добавляем запись о нём в БД Затем, извлекаем id из ячейки в которую записан файл (например это будет 72) Для безопасности ссылки добавляем например рандомную строку (она будет у нас rg8qwj5y4h09) Склеиваем имя файла $id.$rand_line.$rashirenie и записываем 72rg8qwj5y4h09.jpg в созданную ранее ячейку 72 Теперь мы имеем уникальный файл /upload/user_files/72rg8qwj5y4h09.jpg Всё верно?
0
|
|||
|
1943 / 1768 / 825
Регистрация: 23.01.2014
Сообщений: 6,230
|
|||
| 04.11.2015, 19:07 | |||
|
А еще совсем недавно вконтакте закрытые альбомы можно было просматривать, даже если Вы не в друзьях у человека. Действительно магия.
0
|
|||
|
-13 / 2 / 0
Регистрация: 14.08.2014
Сообщений: 240
|
||
| 04.11.2015, 19:21 [ТС] | ||
|
0
|
||
|
1943 / 1768 / 825
Регистрация: 23.01.2014
Сообщений: 6,230
|
|
| 04.11.2015, 20:17 | |
|
0
|
|
|
-13 / 2 / 0
Регистрация: 14.08.2014
Сообщений: 240
|
|
| 04.11.2015, 21:18 [ТС] | |
|
Не по теме: А, так у вас девушки нет что ли? Если так, я уверяю - не хотел обидеть как либо в этом плане. Jodah, только узнал о insert_id - великолепная штука! Всего 14 символов позволили за пол минуты добавить удобства и вывести ссылку "К материалу" при добавлении новости. И да, ссылка действительно в этом случае получится уникальной. Создать вторую такую же - не возможно. Ведь по сути даже если время или случайная строка каким то образом смогут повториться - всегда есть ID который всегда уникален, но в то же время зная ID файла, нельзя узнать его имя (человеку который не должен этого знать) в общем то что нужно! В коде не пробовал пока что, но думаю всё получится. У меня есть всего 1 вопрос, как вставлять имя файла в таблицу? Какой алгоритм? - Создали ячейку в таблице files (пустую и зануленную? ну кроме естественно поля from указывающее на то для чего этот файл нужен. Для какой новости например) - Всё, у нас есть ID, теперь апдейтим ячейку name нужными данными? Или можно как то всё в одно действие сделать?
0
|
|
| 04.11.2015, 21:18 | |
|
Помогаю со студенческими работами здесь
20
Как назначить иконку исполняемому файлу приложения Как назначить иконку динамически скомпилированному exe-файлу
Уникальное имя Дано полное имя файла, т.е путь к файлу, имя и расширение. Выделить из строки только имя первого католога Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|