Скрипт для очистки каталога upload/iblock
сайта на CMS 1С-Битрикс от неиспользуемых файлов (оставшихся после удаления элемента инфоблока).
Скрипт для очистки каталога upload/iblock
от неиспользуемых файлов, которые могут оставаться после удаления элемента инфоблока и, особенно, многократных обменов с 1С.
Скрипт проверяет каждый файл в каталоге upload/iblock
, есть ли он в таблице b_file
и если его там нет выводит полный путь к нему на экран.
--move-file=/путь
: перемещает файл в указанную директорию с сохранением иерархии.
--delete-files
: удаляет файл и каталог, в котором находился удаляемый файл (если он пуст).
В настоящий момент реализован простейший алгоритм, который перед сканированием каталога upload/iblock
загружает все имена файлов из таблицы b_file
в оперативную память, поэтому надо иметь в виду, что в случае нехватки памяти скрипт будет падать.
При использовании более-менее современных версий 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