Анализ формирования временных файлов upload/tmp/BXTEMP- в 1С-Битрикс

Файлы и директории с префиксом BXTEMP- в папке upload/tmp/ формируются механизмом управления временными файлами Битрикса, в частности классом CTempFile.

Основные механизмы создания

Префикс BXTEMP- жестко задан в методе CTempFile::GetDirectoryName в двух модулях:

  1. bitrix/modules/main/classes/general/file_temp.php — для локального файлового хранилища.
  2. bitrix/modules/clouds/classes/general/temp_file.php — для облачных хранилищ.

В отличие от метода GetFileName, который создает случайную папку в upload/tmp/, метод GetDirectoryName создает структуру вида upload/tmp/BXTEMP-ГГГГ-ММ-ДД/ЧЧ/случайное_имя/. Такие файлы имеют заданное "время жизни" (параметр $hours_to_keep_files) и удаляются автоматически системным агентом или при завершении работы PHP (если время жизни вышло).


Основные причины создания и стек вызовов

На основе анализа кода проекта можно выделить следующие уровни и сценарии использования:

1. Интеграция с 1С (Самая частая причина)

При импорте каталога или обмене заказами Битрикс создает временные директории для распаковки XML-файлов и обработки изображений.

2. Экспорт отчетов и данных

При формировании тяжелых отчетов (например, в Excel или CSV) файл собирается порциями во временной директории, чтобы не перегружать память.

3. Работа с облачными хранилищами (clouds)

При загрузке файлов в облако (S3, Google Storage и т.д.) или при их скачивании для обработки (например, для изменения размера), Битрикс создает локальную копию в BXTEMP-.

4. Загрузчик файлов (Uploader) в UI

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

5. Системные операции с данными


Иерархия вызовов (снизу вверх)

  1. Низший уровень (Ядро): CTempFile::GetDirectoryName. Именно здесь формируется строка BXTEMP- и определяется путь в upload/tmp/.
  2. Средний уровень (Системные API):
    • CFile::GetTempName — часто вызывает CTempFile::GetFileName, но может быть частью логики создания папок.
    • \Bitrix\Main\UI\Uploader\Uploader — библиотека для работы с загрузкой.
  3. Верхний уровень (Модули и Компоненты):
    • catalogsale (обмен с 1С).
    • report (выгрузки).
    • photogallery (обработка фото).

Как найти конкретный процесс?

Если в папке upload/tmp/BXTEMP-... скопилось много файлов, это может означать:

  1. Зависшие импорты 1С: Если процесс импорта упал с ошибкой, файлы могут не удалиться (хотя агент очистки должен их со временем убрать).
  2. Проблемы с правами доступа: PHP не может удалить созданные файлы/папки.
  3. Отсутствие агентов на хитах: Если на сайте нет посещаемости и не настроен cron, агент CTempFile::Cleanup не вызывается.

Для отладки конкретного появления файла можно временно добавить debug_print_backtrace() в bitrix/modules/main/classes/general/file_temp.php в методе GetDirectoryName.


Revision #1
Created 2026-03-31 08:29:51 UTC by Евгений Самсон
Updated 2026-03-31 08:30:03 UTC by Евгений Самсон