Файлы в коде - хранилище платформы и свои каталоги
Файл на проекте живёт либо в хранилище платформы, либо в своём каталоге. Выбор между ними определяет почти всё остальное.
Что общего у этих задач
Хранилище платформы даёт номер вместо пути. Поля и свойства хранят именно его, а путь к файлу собирается по номеру в момент вывода.
Путь не пишут в коде руками. Каталог хранения настраивается, а на кластере файлы вообще уезжают в общее место, и жёсткий путь ломается первым.
Загруженное посетителем проверяют до сохранения. Каталог загрузок доступен снаружи, и попавший туда исполняемый файл превращается в чужой вход на сайт.
Файлы переживают сайт. Их переносят при переезде, чистят при разрастании и защищают от постороннего доступа, и всё это проще, когда они лежат в одном предсказуемом месте.
С чего начать
Начинают с выбора хранилища под задачу. Картинки товаров и вложения форм - в хранилище платформы, служебные выгрузки и временные файлы - в свой каталог вне публичного доступа.
Дальше проверяют пределы приёма: размер файла в настройках PHP и веб-сервера, допустимые типы, права на каталог. Несогласованные пределы дают молчаливый отказ при загрузке.
Последним продумывают чистку. Временные файлы, старые выгрузки и вложения брошенных форм копятся годами, и убирать их лучше по расписанию, а не после письма о нехватке места.
Решения подтемы
-
Файлы из кода: сохранение, уменьшенные копии, удаление - как класть файл в хранилище, показывать и убирать за собой.
-
Отдача файла с проверкой прав: закрытые каталоги, заголовки, ссылки - закрытые каталоги, заголовки и ссылки со сроком.
-
Выгрузка в Excel из кода: библиотека, объём, отдача файла - библиотека, запись порциями, объём и чистка.
-
Файл не загружается: пределы, права, типы, веб-сервер - пределы размера, права на каталог, типы файлов.
-
Печатная форма и PDF: шаблон печати, генерация файла, отдача - страница печати, стили печати, сборка файла, права.
-
Файлы платформы изнутри: таблица, каталоги, копии, удаление - номера вместо путей, каталоги на диске, уменьшенные копии, чистка.
-
Картинки не отображаются: разбор причин - файлы не доехали, права каталога, уменьшенные копии, битые записи.
-
Облачное хранилище и CDN: подключение, перенос, копии - вынос файлов наружу, перенос загруженного, адреса, резервные копии.
Частые вопросы
Чем хранилище платформы лучше своего каталога?
Оно само раскладывает файлы, чистит их и переживает переезд на кластер. Свой каталог всё это оставляет вам.
Где хранят уменьшенные копии?
Платформа складывает их рядом и создаёт при первом обращении. Со временем этот объём стоит проверять.
Как отдать файл только своим?
Хранить его вне доступного снаружи каталога и отдавать скриптом с проверкой прав. Каталог загрузок для этого не годится.
Что будет при удалении элемента?
Файлы его полей платформа убирает сама. Файлы, сохранённые своим кодом, удаляет ваш код.
Связанные темы
- Ядро D7 - устройство ядра целиком
- Картинки товара: загрузка, размеры и вывод галереи - то же самое в каталоге
- Права на файлы и папки: файловая система и права структуры - почему файл не сохраняется
- Базовая защита сайта: обновления, доступы, проактивная защита - что нельзя пускать в загрузки
- Раздел Ядро и D7