Создание сайтов на 1С-Битрикс

Рекурсивно очищаем папку upload/iblock от ненужных файлов

Скрипт для очистки папки upload/iblock, который я нашел в интернете, не поддерживал вложенность папок, а в новых версиях Битрикса создаются более одной папки, например: /upload/iblock/одна папка/вторая папка/файл.

К тому же в этом скрипте ускорена обработка массива b_file. Одни плюсы )

Перед применением рекомендую сделать резервную копию сайта.

Что нужно знать:
  • скрипт работает только под администратором
  • стоит ограничение на 50 первых файлов (для проверки, для рабочего режима закомментируйте строчку if($count > 50) break; )
  • пропускаются файлы webp (т.к. я использую на сайтах скрипт, а он создаёт webp автоматически и этих файлов нет в таблице b_file)
  • при обычном запуске код просто показывает в браузере какие файлы он нашёл. Для удаления нужно в url добавить ?action=delete в конец адреса.
<?
require($_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/main/include/prolog_before.php');
$APPLICATION->SetTitle("test clean");

global $USER;
if (!$USER->IsAdmin()) die("Доступ запрещен");

define("NO_KEEP_STATISTIC", true); 
define("NOT_CHECK_PERMISSIONS", true); 

// Формируем кэш имен файлов на основе таблицы b_file.
$arFilesCache = array();
$result = $DB->Query('SELECT FILE_NAME, SUBDIR FROM b_file WHERE MODULE_ID = "iblock"');
while ($row = $result->Fetch()) {
    $arFilesCache[ $row['FILE_NAME'] ] = $row['SUBDIR'];
}

$rootDirPath = $_SERVER['DOCUMENT_ROOT'] . "/upload/iblock/";

global $count;
$count = 0;

foreach (new RecursiveIteratorIterator(new RecursiveDirectoryIterator($rootDirPath)) as $el)
{
    if ($el->isDir()) continue;

    $fileName = $el->getFilename();
    if(isset($arFilesCache[$fileName])) continue;

    // Пропускаем файлы с расширением webp
    $ext = $el->getExtension();
    if($ext == 'webp') continue;

    $count++;
    if($count > 50) break;
    echo '['.$count.'] ' . "$fileName<br>";
        
    $fileRealPath = $el->getRealPath();

    if ($_GET['action'] == 'delete') {
        if (unlink($fileRealPath))
            echo 'Удалён файл '.$fileName.'<br>';
    }
}

require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/epilog_after.php");


Поля, которые можно получить из объекта SplFileInfo: https://www.php.net/manual/ru/class.splfileinfo.php

Скачать:

test_clean.zip (985 Б)
Логотип SiteBERG
Изменено: 24.12.2025 19:02

Статьи

Что нужно сделать?