Блог Горошко Андрея 1C-Битрикс Управление файлами в Битрикс с помощью CFile: Сохранение, ресайз и удаление

Управление файлами в Битрикс с помощью CFile: Сохранение, ресайз и удаление

Средний рейтинг
Еще нет оценок

Работа с файлами — неотъемлемая часть веб-разработки. В Битрикс для этого существует мощный класс CFile. Он не просто работает с файлами на диске, но и регистрирует их в специальной таблице базы данных (b_file), что позволяет системе управлять ими централизованно.

Как Битрикс хранит файлы?

Когда вы загружаете файл через CFile, происходит два действия:

  1. Файл физически сохраняется в папку /upload/.
  2. В таблицу b_file добавляется запись с информацией о файле (имя, размер, путь и т.д.). Эта запись получает уникальный ID.

В дальнейшем все операции с файлом (получение пути, удаление) производятся именно по этому ID.

Шаг 1: Подготовка массива файла — CFile::MakeFileArray

Прежде чем сохранить файл, его нужно представить в виде специального массива. Метод MakeFileArray унифицирует данные, полученные из формы ($_FILES) или с локального диска.

Синтаксис: CFile::MakeFileArray($file_path_or_id)

// Из массива $_FILES
$arFile = $_FILES['MY_PICTURE'];

// Из локального пути на сервере
$arFile = CFile::MakeFileArray($_SERVER["DOCUMENT_ROOT"]."/images/my_photo.jpg");

/*
Результат (массив $arFile) будет иметь структуру:
[
    'name' => 'my_photo.jpg',
    'size' => 12345,
    'tmp_name' => '/tmp/php...',
    'type' => 'image/jpeg'
]
*/

Шаг 2: Сохранение файла — CFile::SaveFile

Этот метод берет подготовленный массив, сохраняет файл и регистрирует его в b_file.

Синтаксис: CFile::SaveFile($arFile, «папка_для_сохранения»)

// Пример сохранения файла, загруженного через форму, в свойство элемента инфоблока
$el = new CIBlockElement;

$arFile = $_FILES['DETAIL_PICTURE'];
$fileId = CFile::SaveFile($arFile, "iblock"); // Сохраняем в /upload/iblock/

if ($fileId) {
    $arFields = [
        "IBLOCK_ID" => 5,
        "NAME" => "Элемент с картинкой",
        "DETAIL_PICTURE" => $fileId // Привязываем файл по ID
    ];
    $el->Add($arFields);
}

Шаг 3: Получение пути к файлу — CFile::GetPath

Зная ID файла, можно в любой момент получить к нему путь от корня сайта.

Синтаксис: CFile::GetPath($fileId)

$fileId = 123;
$filePath = CFile::GetPath($fileId); // вернет, например, "/upload/iblock/abc/my_photo.jpg"
echo '<img src="'.$filePath.'" alt="">';

Шаг 4: Ресайз изображений — CFile::ResizeImageGet

Это одна из самых полезных функций CFile. Она на лету создает уменьшенную копию (thumbnail) изображения, кэширует ее и возвращает путь.

Синтаксис: CFile::ResizeImageGet($file, $arSize, $resizeType, $bInitSizes)

  • $file: ID файла или массив файла.
  • $arSize: Массив вида [‘width’ => 150, ‘height’ => 150].
  • $resizeType: Тип ресайза:
    • BX_RESIZE_IMAGE_EXACT: Точные размеры (может обрезать).
    • BX_RESIZE_IMAGE_PROPORTIONAL: Пропорционально, вписывая в рамки.
    • BX_RESIZE_IMAGE_PROPORTIONAL_ALT: Пропорционально, но размеры могут быть чуть больше рамки.
  • $bInitSizes: Обычно true.

Пример в шаблоне компонента:

// $arItem['PREVIEW_PICTURE'] содержит ID картинки
if ($arItem['PREVIEW_PICTURE']) {
    $renderImage = CFile::ResizeImageGet(
        $arItem['PREVIEW_PICTURE'],
        ['width' => 200, 'height' => 200],
        BX_RESIZE_IMAGE_PROPORTIONAL,
        true
    );
    
    echo '<img src="'.$renderImage['src'].'" width="'.$renderImage['width'].'" height="'.$renderImage['height'].'" alt="">';
}

Шаг 5: Удаление файла — CFile::Delete

Удаляет запись из b_file и сам файл с диска.

Синтаксис: CFile::Delete($fileId)

$fileIdToDelete = 123;
CFile::Delete($fileIdToDelete);

Вывод:
Класс CFile — это централизованный и надежный способ управления файлами в Битрикс. Он избавляет от необходимости вручную работать с файловой системой и предоставляет мощные инструменты, такие как ResizeImageGet, которые значительно упрощают разработку и улучшают производительность сайта.


CFile, MakeFileArray, SaveFile, GetPath, Delete, ResizeImageGet, файлы Битрикс, загрузка файлов, ресайз изображений.

Мой рейтинг:

Добавить комментарий

Related Post

Управление заголовками и мета-тегами в Битрикс: SetPageProperty, ShowTitle, ShowMetaУправление заголовками и мета-тегами в Битрикс: SetPageProperty, ShowTitle, ShowMeta

Средний рейтинг Еще нет оценок Правильное управление заголовками (<title>) и мета-тегами (description, keywords, robots) — это фундамент SEO-продвижения. В Битрикс за это отвечает глобальный объект $APPLICATION. С его помощью можно динамически устанавливать и

Обработка форм и POST-запросов в Битрикс: От HTML до component.phpОбработка форм и POST-запросов в Битрикс: От HTML до component.php

Средний рейтинг Еще нет оценок Любой интерактивный сайт нуждается в формах: обратная связь, заказ, подписка. В Битрикс вы можете легко создать свою собственную логику обработки форм внутри компонента. Это дает

Как создать свой метод REST API в Битрикс на D7 контроллерахКак создать свой метод REST API в Битрикс на D7 контроллерах

Средний рейтинг 1 из 5 звезд. 1 голосов.  Стандартный REST API Битрикс24 можно и нужно расширять своими методами. Это позволяет выносить кастомную бизнес-логику в API и взаимодействовать с ней из