Стандарт для загрузки в каталог сервера? - PullRequest
0 голосов
/ 25 сентября 2011

У меня есть тема / вопрос, касающийся стандартов загрузки файлов, если вы их используете. Представьте, что у вас есть приложение, которое позволяет загружать на ваш сервер много типов документов и помещать их в каталог. Возможно, один и тот же документ может быть загружен дважды. Обычно при сохранении документа вам нужно выполнить какую-то уникальную настройку имени файла. Предположим, что он сохранен в каталоге, а не сохранен непосредственно в базе данных. Конечно, метаданные, вероятно, должны быть сохранены в базе данных. Возможно, типичные методы загрузки PHP могут быть приложением; достаточно просто сделать.

Возможный стандарт именования файлов:

1.) Добавьте имя файла документа с уникальным идентификатором: image.png, измененным на image_20110924_ahd74vdjd3.png

2.) Возможно, используйте UUID / GUID и сохраните фактический тип файла (мета) в базе данных: 2dea72e0-a341-11e0-bdc3-721d3cd780fb * ​​1007 *

3.) Возможно сочетание: image_2dea72e0-a341-11e0-bdc3-721d3cd780fb.png

Можете ли вы порекомендовать хороший стандартный подход? Спасибо, Джефф

1 Ответ

2 голосов
/ 25 сентября 2011

Я всегда просто хэширую файл, используя md5() или sha1(), и использую его в качестве имени файла.

* 1005 Е.Г. *

3059e384f1edbacc3a66e35d8a4b88e5.ext

И я сохраню исходное имя файла в базе данных, если оно мне когда-нибудь понадобится.

Это сделает имя файла уникальным И гарантирует, что у вас не будет одного и того же файла несколько раз на вашем сервере (поскольку они будут иметь один и тот же хеш).

EDIT

Как вы видите, у меня была дискуссия с zerkms по поводу моего решения, и он поднял некоторые правильные вопросы.

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

Это имеет ряд преимуществ:

  1. Я бы добавил записи в базу данных, если пользователи загрузят файл. Он будет содержать пользователя, который загрузил файл, оригинальное имя файла и хэш файла.
  2. Если пользователь хочет удалить файл, просто удалите запись пользователя с этим файлом.
  3. Если файл больше не имеет пользователей после удаления, вы можете удалить сам файл (или сохранить его в любом случае).
  4. Вы не должны хранить файлы где-нибудь в корне документа, а скорее где-то в другом месте, где они недоступны для общего доступа, и передавать файл пользователю с помощью PHP.

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

Еще одна вещь, на которую указывает zerkms, заключается в том, что расширение не требуется при сохранении файла в виде хэша (поскольку он уже находится в базе данных), но мне всегда нравится знать, какие файлы находятся в каталоге, просто делая ls -la например. Однако, опять же, это не обязательно.

...