/bitrix-clear-upload

Скрипт для очистки каталога upload/iblock сайта на CMS 1С-Битрикс от неиспользуемых файлов (оставшихся после удаления элемента инфоблока).

Primary LanguagePHP

bitrix-clear-upload

Скрипт для очистки каталога upload/iblock сайта на CMS 1С-Битрикс от неиспользуемых файлов (оставшихся после удаления элемента инфоблока).

Описание

Скрипт для очистки каталога upload/iblock от неиспользуемых файлов, которые могут оставаться после удаления элемента инфоблока и, особенно, многократных обменов с 1С.

Скрипт проверяет каждый файл в каталоге upload/iblock, есть ли он в таблице b_file и если его там нет выводит полный путь к нему на экран.

Возможные опции

--move-file=/путь: перемещает файл в указанную директорию с сохранением иерархии.

--delete-files: удаляет файл и каталог, в котором находился удаляемый файл (если он пуст).

В настоящий момент реализован простейший алгоритм, который перед сканированием каталога upload/iblock загружает все имена файлов из таблицы b_file в оперативную память, поэтому надо иметь в виду, что в случае нехватки памяти скрипт будет падать.

Важное замечание про short_open_tag PHP

При использовании более-менее современных версий PHP (точно для версий 7+) при запуске скрипта из консоли вы вместо результата можете увидеть какой-то исходный код, завершающийся ошибкой

PHP Fatal error:  Uncaught Error: Call to a member function Query() on null in /var/www/bitrix-clear-upload/clear_upload.php:67
Stack trace:
#0 {main}
  thrown in /var/www/bitrix-clear-upload/clear_upload.php on line 67

В этом случае вам необходимо в конфигурации PHP (обычно php.ini), предназначенную для запуска PHP в консоли, включить опцию short_open_tag = On, т.к. в ядре Битрикса еще очень много кода, используюшего именно сокращенный вариант тэга, обозначающего начало php-кода.

Путь к php.ini на сервере вы можете узнать, выполнив в консоли команду:

$ php -i | grep php.ini
Configuration File (php.ini) Path => /etc/php/7.3/cli
Loaded Configuration File => /etc/php/7.3/cli/php.ini

Изменять лучше не сам php.ini, а добавить в каталог (путь пишу для моего примера) /etc/php/7.3/cli/conf.d файл с именем 99-bitrix.ini и добавить в него следующее содержимое:

short_open_tag = On

После этого скрипт заработает и у вас :-)

Примеры использования

Получить список всех неиспользуемых файлов из каталога upload/iblock:

php clear_upload.php /var/www/example.com

Переместить все неиспользуемые файлы из каталога upload/iblock в папку /backup:

php clear_upload.php --move-files=/backup /var/www/example.com

Удалить все неиспользуемые файлы из каталога upload/iblock:

php clear_upload.php --delete-files /var/www/example.com