Я всегда просто хэширую файл, используя md5()
или sha1()
, и использую его в качестве имени файла.
* 1005 Е.Г. *
3059e384f1edbacc3a66e35d8a4b88e5.ext
И я сохраню исходное имя файла в базе данных, если оно мне когда-нибудь понадобится.
Это сделает имя файла уникальным И гарантирует, что у вас не будет одного и того же файла несколько раз на вашем сервере (поскольку они будут иметь один и тот же хеш).
EDIT
Как вы видите, у меня была дискуссия с zerkms по поводу моего решения, и он поднял некоторые правильные вопросы.
Я бы всегда передавал файл через PHP, а не позволял бы пользователю загружать их напрямую.
Это имеет ряд преимуществ:
- Я бы добавил записи в базу данных, если пользователи загрузят файл. Он будет содержать пользователя, который загрузил файл, оригинальное имя файла и хэш файла.
- Если пользователь хочет удалить файл, просто удалите запись пользователя с этим файлом.
- Если файл больше не имеет пользователей после удаления, вы можете удалить сам файл (или сохранить его в любом случае).
- Вы не должны хранить файлы где-нибудь в корне документа, а скорее где-то в другом месте, где они недоступны для общего доступа, и передавать файл пользователю с помощью PHP.
Недостатком, как указал zerkms, является то, что обработка файлов через PHP требует больше ресурсов, хотя я считаю, что преимущества стоят дополнительных ресурсов.
Еще одна вещь, на которую указывает zerkms, заключается в том, что расширение не требуется при сохранении файла в виде хэша (поскольку он уже находится в базе данных), но мне всегда нравится знать, какие файлы находятся в каталоге, просто делая ls -la
например. Однако, опять же, это не обязательно.