Блог Горошко Андрея 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

Работа с Highload-блоками в Битрикс через D7 ORM: Пошаговое руководствоРабота с Highload-блоками в Битрикс через D7 ORM: Пошаговое руководство

Средний рейтинг Еще нет оценок Highload-блоки (HL-блоки) — это мощный инструмент 1С-Битрикс для хранения произвольных структурированных данных, не являющихся контентом в классическом понимании (как, например, новости или товары). Это могут

Как изменить группу маркировки товара в BitrixКак изменить группу маркировки товара в Bitrix

Средний рейтинг Еще нет оценок В Bitrix существует несколько способов изменить пользовательское свойство «Группа маркировки» (UF_PRODUCT_GROUP) у товара. Рассмотрим два основных метода и определим, какой из них предпочтительнее. Метод 1:

Свойства элементов Битрикс: Работа со Списком, Файлом и ПривязкойСвойства элементов Битрикс: Работа со Списком, Файлом и Привязкой

Средний рейтинг Еще нет оценок При добавлении или обновлении элементов через API (CIBlockElement::Add/Update) работа с простыми свойствами (строка, число) интуитивно понятна. Однако сложные типы, такие как «Список», «Файл» и «Привязка