Перейти к содержимому

Файлы в коде - хранилище платформы и свои каталоги

Файл на проекте живёт либо в хранилище платформы, либо в своём каталоге. Выбор между ними определяет почти всё остальное.

Что общего у этих задач

Хранилище платформы даёт номер вместо пути. Поля и свойства хранят именно его, а путь к файлу собирается по номеру в момент вывода.

Путь не пишут в коде руками. Каталог хранения настраивается, а на кластере файлы вообще уезжают в общее место, и жёсткий путь ломается первым.

Загруженное посетителем проверяют до сохранения. Каталог загрузок доступен снаружи, и попавший туда исполняемый файл превращается в чужой вход на сайт.

Файлы переживают сайт. Их переносят при переезде, чистят при разрастании и защищают от постороннего доступа, и всё это проще, когда они лежат в одном предсказуемом месте.

С чего начать

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

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

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

Решения подтемы

Частые вопросы

Чем хранилище платформы лучше своего каталога?

Оно само раскладывает файлы, чистит их и переживает переезд на кластер. Свой каталог всё это оставляет вам.

Где хранят уменьшенные копии?

Платформа складывает их рядом и создаёт при первом обращении. Со временем этот объём стоит проверять.

Как отдать файл только своим?

Хранить его вне доступного снаружи каталога и отдавать скриптом с проверкой прав. Каталог загрузок для этого не годится.

Что будет при удалении элемента?

Файлы его полей платформа убирает сама. Файлы, сохранённые своим кодом, удаляет ваш код.

Связанные темы

Первоисточники