# Анализ формирования временных файлов 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-файлов и обработки изображений.

- **Сценарии:** Импорт каталога товаров, экспорт заказов, импорт Highload-блоков.
- **Пример стека:**<div class="code-fence-highlighter-copy-button" data-fence-content="Yml0cml4L2NvbXBvbmVudHMvYml0cml4L2NhdGFsb2cuaW1wb3J0LjFjL2NvbXBvbmVudC5waHAKLT4gQ1RlbXBGaWxlOjpHZXREaXJlY3RvcnlOYW1lKDYsICIxY19jYXRhbG9nIik=">![]()</div>```text
    bitrix/components/bitrix/catalog.import.1c/component.php
    -> CTempFile::GetDirectoryName(6, "1c_catalog")
    
    ```

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

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

- **Сценарии:** Экспорт конструктора отчетов, экспорт списка заказов.
- **Пример стека:**<div class="code-fence-highlighter-copy-button" data-fence-content="Yml0cml4L2NvbXBvbmVudHMvYml0cml4L3JlcG9ydC52aWV3L3N0ZXhwb3J0LmFqYXgucGhwCi0+IENUZW1wRmlsZTo6R2V0RGlyZWN0b3J5TmFtZSgxLCBhcnJheSgncmVwb3J0JywgdW5pcWlkKCdyZXBvcnRfZXhwb3J0XycpKSk=">![]()</div>```text
    bitrix/components/bitrix/report.view/stexport.ajax.php
    -> CTempFile::GetDirectoryName(1, array('report', uniqid('report_export_')))
    
    ```

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

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

- **Сценарии:** Синхронизация с облаком, скачивание файла из облака для генерации превью.
- **Пример стека:**<div class="code-fence-highlighter-copy-button" data-fence-content="Yml0cml4L21vZHVsZXMvY2xvdWRzL2NsYXNzZXMvZ2VuZXJhbC9zdG9yYWdlLnBocAotPiBDVGVtcEZpbGU6OkdldERpcmVjdG9yeU5hbWUoMiwgJ2Nsb3Vkcycp">![]()</div>```text
    bitrix/modules/clouds/classes/general/storage.php
    -> CTempFile::GetDirectoryName(2, 'clouds')
    
    ```

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

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

- **Сценарии:** Загрузка картинок в фотогалерею, вложение файлов в письма техподдержки.
- **Пример стека:**<div class="code-fence-highlighter-copy-button" data-fence-content="Yml0cml4L21vZHVsZXMvbWFpbi9saWIvdWkvdXBsb2FkZXIvdXBsb2FkZXIucGhwCi0+IFxDVGVtcEZpbGU6OkdldERpcmVjdG9yeU5hbWUoLi4uKQ==">![]()</div>```text
    bitrix/modules/main/lib/ui/uploader/uploader.php
    -> \CTempFile::GetDirectoryName(...)
    
    ```

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

- **Локации:** При импорте или обновлении базы местоположений архивы распаковываются в `BXTEMP-`.
- **Почтовый модуль:** При обработке входящих писем с вложениями.
- **Перевод:** При работе с интерфейсом перевода сообщений.

---

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

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