@_ne_scaju_, подожди смеяться. --- Добавлено --- @_ne_scaju_, твой класс я не смотрел, возможно завтра. Попробуй прикрутить.
@mahmuzar Не я смеюсь из-за того что не понимаю) Честное слово) Да и смайл этот прикольный что самому хочется поставить его А какой ресайз попробовать прикрутить? Буду завтра пробовать прикрутить)))
Чтобы положить картинку туда, откуда её веб-сервер отдаст, нужно знать откуда вебсервер картинки отдаёт.
Можно вопрос задам, тут стоит такая фишка: Если пользователь грузит точно такую картинку то есть с одинаковым названием, Например foto111.jpg и foto111.jpg то в базе md5 шифрует тот же самый хеш для этих двух картинок, не меняется на другой, Если я картинку удалю и попробую эту же картинку залить опять, то хеш с генерируется опять тот же самый. А надо что бы он создавал разный хеш не зависимо загружали вы эту картинку ранее, не зависимо что одинаковое название у них и т.д. что бы все время менялся, а не подставлялся тот же самый хеш что с генерировали недавно. Пользуюсь функцией которую мне посоветовали здесь $name = md5_file($filePath); Как можно исправить? вот таким образом можно? $name = md5_file(md5($filePath));
ты хэш файла считай, а не названия. или генери рандомный номер. --- Добавлено --- ну и заебись. пока у тебя посещаемость до миллиона не выросла и из сервака дым не пошёл - ты вполне можешь этим пользоваться.
почитай сначала сам. Это ж простая штука. Ищи. Всё твои задачи на ближайшие три года - Это повседневные задачи Для пхп, которые уже сто раз были кем-то решены. Учись искать решение.
@igordata Вот нашел, такой типа функции, может они помогут мне в решении? $filename = substr(md5(microtime() . rand(0, 9999)), 0, 20); Попробовал, рандомный текст получается, но на много ли хватит, загружаемых файлов?
кол-во символов в словаре, нужно возвести в степень по длине строки, если у тебя md5, то алфавит a-f и 0-9, будет 16 и длина md5 это 32 символа, будет 16^32 это очень большое число https://ru.wikipedia.org/wiki/Разме....BE.D1.80.D0.B5.D0.BD.D0.B8.D1.8F.D0.BC.D0.B8 главное перед записью файла, проверяй свободно ли имя
Хотел у вас спросить, а как можно проверить файл перед загрузкой на имеющиеся имя? $nane = md5_file($filepath); Представьте ситуацию пользователь один грузит файл с именем image1 И пользователь два грузит с таким названием имя image1 а эта функция md5_file с генерирует тот же хешь что и для первого что второго файла. Как можно предусмотреть и предупредить пользователя что файл такой существует? Пробовал сделать так: if($name = md5_file($filepath){ echo 'файл с таким именем существует'; }else{ 'загрузка успешно завершена'; } Почему то проверка не проходит, что ж не так. Может вы мне подскажите где эту проверку надо правильно делать. Файл который я использую выше в теме загружен.
а посчитай --- Добавлено --- тебя вообще не должно волновать имя файла. никогда. забей. это вообще просто так. даже не смотри на него. пользователь присылает тебе файлы. не имена. файлы. а как он там их у себя называет - сто человек - сто разных названий одного файла. Забей
@igordata Как это не волнует. Я гружу картинку с названием imc и генерю хеш для него. А если я гружу опять эту же картину то хеш для этой картинки генерится тот же самый. И не предупреждает что эта картинка уже была загружена.
Вообще, это не правильно, почему - описано в доке к ноде, но если кратко: то что ты проверил свободно ли имя перед записью ещё ничего не гарантирует. Прямо в момент между проверкой и созданием файла кто-то другой может создать файл с точно таким же именем и у кого-то обязательно случится облом. По хорошему создавать файл надо открывая его через fopen('filename', 'x') что бы в случае наличия файла возникала ошибка, беда же в двух вещах: 1. Вместо эксепшена она выкидывает ворнинг, который тут явно не к месту. 2. Хз как дальнейшая логика реализована в потрохах, не копался. Радует только, что если нормально сгенерировать имя, вероятность такой коллизии стремится к 0, но всё же ) --- Добавлено --- @_ne_scaju_ чувак, а ты не пробовал доку читать? md5_file делает хэш файла, а не его имени.
@romach А надо сделать хеш имени а не файла? Читал вроде как бы. И выбираю правильный метод. Короче не понял вас... Меня интересует вообще стоить ли использовать эту функцию md5_file Для генерации хеша?
1. название не связано с содержимым файла. 2. я ж сказал вроде, не пляши от названия, танцуй от содержания. --- Добавлено --- рейс кондишн --- Добавлено --- надо помнить о чем шел разговор два сообщения назад. хотя бы. --- Добавлено --- не первый раз обозначь критерии, тогда будет понятно
md5_file() медленно и прожорливо. Но у вас есть такие данные, как размер файла, время загрузки, разрешение.
@_ne_scaju_ у меня на сервере хэш 7.5 мб файла - 0.03 секунды. Столько же времени занимает 50.000 раз захэшировать обычную строку из нескольких символов. По памяти оказалось не прожорливо, эта функция не загружает файл в ОЗУ.
@[vs] в Так что можно её использовать смело? А я так не думаю, из-за одной причины. Вот может возникнуть ситуация такая: User1 загружает файл с названием любым например avatar.jpg User2 загружает файл с таким же названием avatar.jpg И у этих обоих юзеров будет создан один хеш, и если кто-то из них удалит файл то и у другого он пропадет. Может кто посоветует что-то оригинальней? Хорошую функцию? Или дополнить эту с сочетанием с другой.
@_ne_scaju_ например добавлять к имени файла id пользователя с разделителем, как это делает вконтакт?
@[vs] Это помогло добавить id пользователя, спасибо, сделал так: PHP: $name = md5_file(filepath).$_SESSION['user_id'].$i;$i++; А вот на счет разделителя не понял вас, надо добиться чего чтобы было подчеркивание?