Перед применением рекомендую сделать резервную копию сайта.
- скрипт работает только под администратором
- стоит ограничение на 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
Скачать:
