Названия файлов изображений на сайте: хэши или случайные строки? - PullRequest
2 голосов
/ 28 февраля 2012

Я прочитал несколько вопросов о присвоении имен загруженным изображениям, и люди обычно советуют хешировать содержимое изображений для создания уникального имени файла плюс автоматическое предотвращение хранения дубликатов. Но если два пользователя загружают одно и то же изображение, а затем один из них хочет удалить его? Нам потребуется проверять наличие дополнительных владельцев каждый раз при удалении изображения.

ИМХО вероятность дублирования файлов обычно крошечная; в то же время для этой проверки требуется добавить несколько строк кода, и это будет стоить чего-то с точки зрения производительности (галереи, как правило, используют огромные таблицы).

Так почему бы не использовать действительно случайную строку для имени? В php, например:

$filename = md5(mt_rand());

Не говоря уже о том, что хэши генерируют довольно длинные значения, и со случайным значением вы можете отрегулировать длину по своему усмотрению (имея в виду, что число вариаций также изменяется):

$filename = substr(md5(mt_rand()), 0, 15);

И с петлей для возможных столкновений (идея, украденная из другого вопроса):

while (true) {
 $filename = substr(md5(mt_rand()), 0, 15);
 if (!file_exists('somedir/'.$filename.'.jpg')) break;
}

Что вы думаете?

1 Ответ

1 голос
/ 28 февраля 2012

Почему бы вам просто не поставить префикс файла изображения по идентификатору пользователя или не создать папку для каждого пользователя?(Я думаю, что не стоит хранить слишком много файлов в одной папке.) Если это соответствует вашим требованиям, вы можете делать все, что захотите, но метод Hash может оказаться более эффективным.

...