Анализ формирования временных файлов upload/tmp/BXTEMP- в 1С-Битрикс
Файлы и директории с префиксом BXTEMP- в папке upload/tmp/ формируются механизмом управления временными файлами Битрикса, в частности классом CTempFile.
Основные механизмы создания
Префикс BXTEMP- жестко задан в методе CTempFile::GetDirectoryName в двух модулях:
bitrix/modules/main/classes/general/file_temp.php— для локального файлового хранилища.bitrix/modules/clouds/classes/general/temp_file.php— для облачных хранилищ.
В отличие от метода GetFileName, который создает случайную папку в upload/tmp/, метод GetDirectoryName создает структуру вида upload/tmp/BXTEMP-ГГГГ-ММ-ДД/ЧЧ/случайное_имя/. Такие файлы имеют заданное "время жизни" (параметр $hours_to_keep_files) и удаляются автоматически системным агентом или при завершении работы PHP (если время жизни вышло).
Основные причины создания и стек вызовов
На основе анализа кода проекта можно выделить следующие уровни и сценарии использования:
1. Интеграция с 1С (Самая частая причина)
При импорте каталога или обмене заказами Битрикс создает временные директории для распаковки XML-файлов и обработки изображений.
- Сценарии: Импорт каталога товаров, экспорт заказов, импорт Highload-блоков.
- Пример стека:
bitrix/components/bitrix/catalog.import.1c/component.php -> CTempFile::GetDirectoryName(6, "1c_catalog")
2. Экспорт отчетов и данных
При формировании тяжелых отчетов (например, в Excel или CSV) файл собирается порциями во временной директории, чтобы не перегружать память.
- Сценарии: Экспорт конструктора отчетов, экспорт списка заказов.
- Пример стека:
bitrix/components/bitrix/report.view/stexport.ajax.php -> CTempFile::GetDirectoryName(1, array('report', uniqid('report_export_')))
3. Работа с облачными хранилищами (clouds)
При загрузке файлов в облако (S3, Google Storage и т.д.) или при их скачивании для обработки (например, для изменения размера), Битрикс создает локальную копию в BXTEMP-.
- Сценарии: Синхронизация с облаком, скачивание файла из облака для генерации превью.
- Пример стека:
bitrix/modules/clouds/classes/general/storage.php -> CTempFile::GetDirectoryName(2, 'clouds')
4. Загрузчик файлов (Uploader) в UI
Современные компоненты загрузки файлов (например, в административной части или в формах обратной связи) используют временные папки для хранения чанков (кусков) загружаемых файлов до их полной сборки.
- Сценарии: Загрузка картинок в фотогалерею, вложение файлов в письма техподдержки.
- Пример стека:
bitrix/modules/main/lib/ui/uploader/uploader.php -> \CTempFile::GetDirectoryName(...)
5. Системные операции с данными
- Локации: При импорте или обновлении базы местоположений архивы распаковываются в
BXTEMP-. - Почтовый модуль: При обработке входящих писем с вложениями.
- Перевод: При работе с интерфейсом перевода сообщений.
Иерархия вызовов (снизу вверх)
- Низший уровень (Ядро):
CTempFile::GetDirectoryName. Именно здесь формируется строкаBXTEMP-и определяется путь вupload/tmp/. - Средний уровень (Системные API):
CFile::GetTempName— часто вызываетCTempFile::GetFileName, но может быть частью логики создания папок.\Bitrix\Main\UI\Uploader\Uploader— библиотека для работы с загрузкой.
- Верхний уровень (Модули и Компоненты):
catalog,sale(обмен с 1С).report(выгрузки).photogallery(обработка фото).
Как найти конкретный процесс?
Если в папке upload/tmp/BXTEMP-... скопилось много файлов, это может означать:
- Зависшие импорты 1С: Если процесс импорта упал с ошибкой, файлы могут не удалиться (хотя агент очистки должен их со временем убрать).
- Проблемы с правами доступа: PHP не может удалить созданные файлы/папки.
- Отсутствие агентов на хитах: Если на сайте нет посещаемости и не настроен
cron, агентCTempFile::Cleanupне вызывается.
Для отладки конкретного появления файла можно временно добавить debug_print_backtrace() в bitrix/modules/main/classes/general/file_temp.php в методе GetDirectoryName.
No comments to display
No comments to display