Главная » API Битрикс » CFile » CFile::GetByID в Битрикс — как получить информацию о файле по ID

CFile::GetByID в Битрикс — как получить информацию о файле по ID

CFile::GetByID() — метод API 1С-Битрикс, который позволяет получить информацию о файле по его идентификатору. Метод часто используется при работе с файлами инфоблоков, изображениями, пользовательскими полями и файловыми свойствами.

В этой статье разберём синтаксис CFile::GetByID(), получение данных через Fetch(), URL файла, имя, размер, MIME-тип, размеры изображения, а также сравним GetByID() с CFile::GetFileArray() и CFile::GetPath().

Коротко: CFile::GetByID() возвращает результат выборки файла. Чтобы получить данные в виде массива, необходимо вызвать метод Fetch().

Что делает CFile::GetByID()

Метод получает информацию о файле из таблицы b_file по его ID.

Синтаксис:

$result = CFile::GetByID($fileId);

После этого данные можно получить через:

$file = $result->Fetch();

Полный пример:

$fileId = 123;

$result = CFile::GetByID($fileId);

$file = $result->Fetch();

print_r($file);

Как получить данные файла

Основная особенность CFile::GetByID() заключается в том, что сам метод возвращает объект результата выборки.

Поэтому такой код:

$file = CFile::GetByID($fileId);

echo $file['SRC'];

будет неправильным.

Сначала необходимо вызвать Fetch():

$result = CFile::GetByID($fileId);

$file = $result->Fetch();

echo $file['SRC'];

Нужна помощь с Битрикс?





    Что возвращает CFile::GetByID()

    После вызова Fetch() можно получить массив с информацией о файле.

    $result = CFile::GetByID($fileId);
    
    $file = $result->Fetch();
    
    print_r($file);

    В зависимости от файла в массиве можно получить такие данные:

    Поле Описание
    ID Идентификатор файла
    TIMESTAMP_X Дата изменения файла
    MODULE_ID Модуль, к которому относится файл
    HEIGHT Высота изображения
    WIDTH Ширина изображения
    FILE_SIZE Размер файла в байтах
    CONTENT_TYPE MIME-тип файла
    SUBDIR Подкаталог хранения файла
    FILE_NAME Имя файла на сервере
    ORIGINAL_NAME Оригинальное имя файла
    SRC Путь к файлу

    Как получить URL файла

    После получения массива можно обратиться к полю SRC:

    $result = CFile::GetByID($fileId);
    $file = $result->Fetch();
    
    echo $file['SRC'];

    Например, результат может выглядеть так:

    /upload/iblock/abc/photo.jpg

    URL можно использовать непосредственно в HTML:

    <img src="<?= $file['SRC']; ?>" alt="">

    Как получить изображение по ID

    Если ID относится к изображению, можно вывести его следующим образом:

    $result = CFile::GetByID($fileId);
    $file = $result->Fetch();
    
    if ($file)
    {
        echo '<img src="' . htmlspecialchars($file['SRC']) . '" alt="">';
    }

    Для изображения также доступны его реальные размеры:

    echo $file['WIDTH'];
    echo $file['HEIGHT'];

    Получить имя файла

    Имя файла, под которым он хранится на сервере:

    echo $file['FILE_NAME'];

    Оригинальное название файла:

    echo $file['ORIGINAL_NAME'];

    Например, файл может храниться на сервере под именем:

    photo_abc123.jpg

    а оригинальное имя при загрузке было:

    Фото товара.jpg

    Как получить размер файла

    Размер находится в поле FILE_SIZE и указывается в байтах.

    echo $file['FILE_SIZE'];

    Для вывода размера в мегабайтах:

    $size = round($file['FILE_SIZE'] / 1024 / 1024, 2);
    
    echo $size . ' МБ';

    Как получить MIME-тип

    MIME-тип файла находится в поле CONTENT_TYPE:

    echo $file['CONTENT_TYPE'];

    Например:

    image/jpeg
    image/png
    application/pdf
    application/zip

    Как получить ширину и высоту изображения

    Для изображений Битрикс хранит размеры в полях WIDTH и HEIGHT.

    echo 'Ширина: ' . $file['WIDTH'];
    echo 'Высота: ' . $file['HEIGHT'];

    Это можно использовать при формировании HTML:

    <img
        src="<?= $file['SRC']; ?>"
        width="<?= $file['WIDTH']; ?>"
        height="<?= $file['HEIGHT']; ?>"
        alt="">

    Проверка существования файла

    Перед использованием данных рекомендуется проверить результат Fetch().

    $result = CFile::GetByID($fileId);
    $file = $result->Fetch();
    
    if ($file)
    {
        echo $file['SRC'];
    }
    else
    {
        echo 'Файл не найден';
    }

    Такая проверка особенно важна, если ID файла хранится в свойстве инфоблока, пользовательском поле или приходит из внешних данных.

    Получение картинки DETAIL_PICTURE

    Например, нужно получить детальную картинку элемента инфоблока.

    $element = CIBlockElement::GetByID($elementId)->GetNext();
    
    if ($element && !empty($element['DETAIL_PICTURE']))
    {
        $result = CFile::GetByID($element['DETAIL_PICTURE']);
        $file = $result->Fetch();
    
        if ($file)
        {
            echo $file['SRC'];
        }
    }

    Получение PREVIEW_PICTURE

    Аналогично можно получить картинку анонса:

    $element = CIBlockElement::GetByID($elementId)->GetNext();
    
    if ($element && !empty($element['PREVIEW_PICTURE']))
    {
        $result = CFile::GetByID($element['PREVIEW_PICTURE']);
        $file = $result->Fetch();
    
        if ($file)
        {
            echo $file['SRC'];
        }
    }

    Получение файла из свойства инфоблока

    Если у элемента есть свойство типа «Файл», его значение обычно содержит ID файла.

    $fileId = $arResult['PROPERTIES']['DOCUMENT']['VALUE'];
    
    if ($fileId)
    {
        $result = CFile::GetByID($fileId);
        $file = $result->Fetch();
    
        if ($file)
        {
            echo $file['SRC'];
        }
    }

    Так можно работать не только с изображениями, но и с PDF, DOCX, ZIP и другими файлами.

    Получение нескольких параметров файла

    Например, нужно вывести название, размер и ссылку на скачивание:

    $result = CFile::GetByID($fileId);
    $file = $result->Fetch();
    
    if ($file)
    {
        echo 'Название: ' . htmlspecialchars($file['ORIGINAL_NAME']) . '<br>';
        echo 'Размер: ' . round($file['FILE_SIZE'] / 1024, 2) . ' КБ<br>';
        echo 'URL: ' . htmlspecialchars($file['SRC']);
    }

    Ссылка на скачивание файла

    Полученный URL можно использовать в обычной ссылке:

    $result = CFile::GetByID($fileId);
    $file = $result->Fetch();
    
    if ($file)
    {
        ?>
        <a href="<?= htmlspecialchars($file['SRC']) ?>" download>
            Скачать файл
        </a>
        <?php
    }

    CFile::GetByID и CFile::GetFileArray

    Эти два метода решают похожие задачи, поэтому их часто сравнивают.

    Метод Результат Особенность
    CFile::GetByID() CDBResult Для получения массива нужен Fetch()
    CFile::GetFileArray() Массив Сразу возвращает данные файла
    CFile::GetPath() Строка Возвращает только путь к файлу

    Например, через GetByID():

    $result = CFile::GetByID($fileId);
    $file = $result->Fetch();
    
    echo $file['SRC'];

    Через GetFileArray():

    $file = CFile::GetFileArray($fileId);
    
    echo $file['SRC'];

    Если необходимо просто получить информацию о файле, CFile::GetFileArray() обычно удобнее, поскольку не требует отдельного вызова Fetch().

    CFile::GetByID и CFile::GetPath

    Если требуется только URL файла, можно использовать:

    $src = CFile::GetPath($fileId);
    
    echo $src;

    Если нужны дополнительные данные:

    • имя файла;
    • оригинальное название;
    • размер;
    • MIME-тип;
    • ширина;
    • высота;

    тогда лучше получить информацию о файле через CFile::GetByID() или CFile::GetFileArray().

    Практический пример для шаблона Битрикс

    Допустим, в шаблоне необходимо вывести документ:

    <?php
    
    $fileId = $arResult['PROPERTIES']['DOCUMENT']['VALUE'];
    
    if ($fileId)
    {
        $result = CFile::GetByID($fileId);
        $file = $result->Fetch();
    
        if ($file)
        {
            ?>
            <a href="<?= htmlspecialchars($file['SRC']) ?>" target="_blank">
                <?= htmlspecialchars($file['ORIGINAL_NAME']) ?>
            </a>
            <?php
        }
    }
    
    ?>

    Практический пример для изображения

    <?php
    
    $fileId = $arResult['DETAIL_PICTURE'];
    
    if ($fileId)
    {
        $result = CFile::GetByID($fileId);
        $file = $result->Fetch();
    
        if ($file)
        {
            ?>
            <img
                src="<?= htmlspecialchars($file['SRC']) ?>"
                width="<?= (int)$file['WIDTH'] ?>"
                height="<?= (int)$file['HEIGHT'] ?>"
                alt="<?= htmlspecialchars($arResult['NAME']) ?>"
            >
            <?php
        }
    }
    
    ?>

    Частые ошибки при использовании CFile::GetByID()

    Забыли вызвать Fetch()

    Неправильно:

    $file = CFile::GetByID($fileId);
    
    echo $file['SRC'];

    Правильно:

    $result = CFile::GetByID($fileId);
    
    $file = $result->Fetch();
    
    echo $file['SRC'];

    Передаётся URL вместо ID

    Метод ожидает идентификатор файла.

    Неправильно:

    CFile::GetByID('/upload/photo.jpg');

    Правильно:

    CFile::GetByID(123);

    Передаётся пустой ID

    Перед вызовом метода желательно проверить значение:

    if (!empty($fileId))
    {
        $result = CFile::GetByID($fileId);
        $file = $result->Fetch();
    }

    Файл был удалён

    Если ID существует в данных сайта, но самого файла уже нет, необходимо корректно обработать отсутствие результата.

    $result = CFile::GetByID($fileId);
    $file = $result->Fetch();
    
    if (!$file)
    {
        // Файл не найден
    }

    Когда использовать CFile::GetByID()

    Метод подходит, когда нужно получить данные конкретного файла по его ID и работать с результатом как с выборкой.

    Типичные задачи:

    • получение информации о файле;
    • получение URL изображения;
    • получение оригинального имени;
    • получение размера;
    • получение MIME-типа;
    • получение размеров изображения;
    • работа с файловыми свойствами инфоблоков;
    • работа с PREVIEW_PICTURE и DETAIL_PICTURE.

    Что выбрать: GetByID или GetFileArray?

    Если нужен простой и короткий код, чаще удобнее использовать CFile::GetFileArray():

    $file = CFile::GetFileArray($fileId);
    
    if ($file)
    {
        echo $file['SRC'];
    }

    Если по каким-либо причинам требуется работать именно с результатом выборки, можно использовать CFile::GetByID():

    $result = CFile::GetByID($fileId);
    
    $file = $result->Fetch();

    Для большинства обычных задач получения данных файла CFile::GetFileArray() является более удобным вариантом.

    FAQ

    Что возвращает CFile::GetByID?

    Метод возвращает результат выборки. Для получения массива с данными файла необходимо вызвать Fetch().

    Как получить URL файла через CFile::GetByID?

    $result = CFile::GetByID($fileId);
    $file = $result->Fetch();
    
    echo $file['SRC'];

    Как получить имя файла?

    $result = CFile::GetByID($fileId);
    $file = $result->Fetch();
    
    echo $file['ORIGINAL_NAME'];

    Как получить размер файла?

    $result = CFile::GetByID($fileId);
    $file = $result->Fetch();
    
    echo $file['FILE_SIZE'];

    Как получить ширину и высоту картинки?

    $result = CFile::GetByID($fileId);
    $file = $result->Fetch();
    
    echo $file['WIDTH'];
    echo $file['HEIGHT'];

    Чем CFile::GetByID отличается от CFile::GetFileArray?

    GetByID() возвращает результат выборки, после чего необходимо вызвать Fetch(). GetFileArray() сразу возвращает массив с информацией о файле.

    Заключение

    CFile::GetByID() — стандартный метод API Битрикс для получения информации о файле по его ID. После вызова Fetch() можно получить URL, имя, размер, MIME-тип, ширину, высоту и другие параметры.

    Метод особенно полезен при работе с файловыми свойствами инфоблоков, PREVIEW_PICTURE, DETAIL_PICTURE и пользовательскими полями.

    Если же требуется максимально простой способ получить готовый массив данных о файле, стоит обратить внимание на CFile::GetFileArray().

    Нужна помощь с Битрикс?

    Исправим ошибку, доработаем сайт, ускорим Битрикс или поможем разобраться с проблемой.

    Услуги
    База знаний