Кейсы

PHP Bitrix b_file upload

Похожие кейсы:

1С-Битрикс
2026 год

Очичтка b_file и upload

Разработка и реализация безопасного алгоритма очистки базы данных `b_file` и физического хранилища `/upload/iblock/`. Проект позволил сократить объем файлового мусора на 97%, удалив более 900 000 неиспользуемых записей без риска для целостности проекта.

В ходе эксплуатации крупного проекта на 1С-Битрикс в таблице `b_file` скопилось около 965 000 записей, в то время как реально используемых данных в инфоблоках оставалось менее 30 000. Избыточный объем мусора замедлял операции резервного копирования, увеличивал стоимость владения инфраструктурой и создавал сложности при миграции данных. Был реализован алгоритм «белого списка» (whitelist), который гарантирует сохранение всех востребованных файлов при полном удалении неиспользуемых объектов.

Требовалось разработать инструмент для автоматизированного поиска и удаления «осиротевших» файлов (записей в БД, на которые нет ссылок в контенте). Ключевыми условиями были: высокая скорость обработки (пакетное удаление), очистка не только записей в БД, но и физических файлов на диске вместе с их кэшированными копиями (resize cache), а также предотвращение случайного удаления файлов системных модулей (landing, sender, fileman).

Задача решена в несколько этапов. Сначала была создана временная таблица-индекс `b_file_used`, куда с помощью серии SQL-запросов были собраны идентификаторы всех реально используемых файлов из элементов инфоблоков (превью, детали, свойства), разделов, профилей пользователей и пользовательских полей (User Fields). На втором этапе был запущен специализированный PHP-скрипт, выполняющий удаление через метод `CFile::Delete()`. Это обеспечило корректную работу со всеми связанными ресурсами Битрикса. Для предотвращения нагрузки на сервер была внедрена пакетная обработка с регулируемыми паузами (`usleep`).

Основные возможности

  • Whitelist-алгоритм: сбор связей из инфоблоков v1/v2, свойств типа «F» и пользовательских полей
  • Фильтрация по модулям: защита критических данных через ограничение обработки только по `MODULE_ID = 'iblock'`
  • Логирование: детальный аудит процесса с фиксацией ошибок и прогресса выполнения
  • Безопасное удаление: использование API `CFile` для автоматической очистки `resize_cache`
  • Пакетная обработка: высокая скорость (до 300 файлов/сек) без блокировки базы данных
  • Пост-обработка: автоматический поиск и удаление пустых директорий на диске после зачистки