Битрикс, удаление ненужных модулей

9k
Алексей,
Битрикс, удаление ненужных модулей
Битрикс, удаление ненужных модулей

Если у Вас одна из старших редакций 1С-Битрикс, неизбежно будут модули и компоненты которые Вы не используете, но которые занимают место на хостинге, периодически обновляются и добавляются в бекапы, увеличивая время создания и вес архива.

Если у Вас одна из старших редакций 1С-Битрикс, неизбежно будут модули и компоненты которые Вы не используете, но которые занимают место на хостинге, периодически обновляются и добавляются в бекапы, увеличивая время создания и вес архива.

Отключить (удалить по версии битрикс) ненужные модули можно по адресу /bitrix/admin/module_admin.php?lang=ru, но файлы модуля всё равно останутся.

Вообще, стандартно файлы модулей удалять нельзя, т.к. они входят в состав ядра, хотя веских причин для запрета удаления я не вижу. Т.ч. я тут накидал скрипт который берет удаленные (из БД) модули и переносит их файлы в один архив. Почему не удаляю совсем? Потому что в будущем какой-то модуль может понадобиться и его можно будет восстановить из этого архива.

upd: на деле удаленные модули можно повторно загрузить через обновление системы

Важно! Я настоятельно рекомендую сделать резервную копию перед выполнением.

// Помещаем в архив "удаленные" модули
$zipPath = $_SERVER["DOCUMENT_ROOT"].'/bitrix/modules/unlink-modules.zip';
if (file_exists($zipPath)) { // Удаляем файл перед созданием архива
	unlink($zipPath);
}

$zip = new ZipArchive();
$zip->open($zipPath, ZipArchive::CREATE);

foreach (array("/local/modules", "/bitrix/modules") as $folder) {
	$handle = @opendir($_SERVER["DOCUMENT_ROOT"].$folder);
	if ($handle) {
		while (false !== ($dir = readdir($handle))) {
			if (!isset($arModules[$dir]) && is_dir($_SERVER["DOCUMENT_ROOT"].$folder."/".$dir) && $dir != "." && $dir != ".." && $dir != "main" && strpos($dir, ".") === false) {
				$moduleDir = $_SERVER["DOCUMENT_ROOT"].$folder."/".$dir;
				if($info = CModule::CreateModuleObject($dir)) {
					if (!$info->IsInstalled()) {
						$arModules[$dir]["MODULE_ID"] = $info->MODULE_ID;
						$arModules[$dir]["MODULE_NAME"] = $info->MODULE_NAME;
						$arModules[$dir]["MODULE_DIR"] = $moduleDir;

						$files = new RecursiveIteratorIterator(
							new RecursiveDirectoryIterator($moduleDir),
							RecursiveIteratorIterator::LEAVES_ONLY
						);

						foreach ($files as $name => $file) {
							if (!$file->isDir()) { // Пропускаем папки (будут добавлены автоматически)
								$filePath = $file->getRealPath();
								$relativePath = $dir.'/'.substr($filePath, strlen($moduleDir) + 1); // Путь от папки модуля
								$zip->addFile($file->getRealPath(), $relativePath); // Добавляем модуль в архив
							}
						}
					}
				}
			}
		}
		closedir($handle);
	}
}

$zip->close();

// Удаляем папку модуля
foreach ($arModules as $arModule) {
	if ($arModule["MODULE_DIR"]) {
		$iterator = new RecursiveIteratorIterator(
			new RecursiveDirectoryIterator($arModule["MODULE_DIR"]),
			RecursiveIteratorIterator::CHILD_FIRST
		);

		foreach ($iterator as $path) {
			if ($path->isDir()) {
				rmdir((string)$path);
			} else {
				unlink((string)$path);
			}
		}
		rmdir($arModule["MODULE_DIR"]);
	}
}

Результаты:

  • Кол-во файлов на сайте уменьшилось с 78к до 48к
  • Общий размер файлов уменьшился с 3.13Гб до 2.93Гб
  • Размер бекапа уменьшился с 366Мб до 259Мб
  • Ошибок нет, система работает стабильно

Вывод: нужно удалять неиспользуемые компоненты, но в другой раз :)

Есть вопросы или нашли ошибку? Напишите комментарий (можно без регистрации), отвечать стараюсь быстро.

Опубликовано 25 сентября 2019 | Обновлено 17 марта 2022
чистка, готовый код, модули
Поделиться
Похожие статьи
Как отключить модуль vote в bitrix
Была информация что в модуле нашли уязвимость (исправили в версии 21.0.100)
Читать дальше » 0
Алексей,
Удаление ненужных компонентов Битрикс
Продолжаю чистить ядро от ненужного мне кода, на этот раз под нож попали стандартные компоненты
Читать дальше » 0
Алексей,
Комментарии
❮…❯
Авторизуйтесь чтобы получать уведомления об ответе
Алексей
8 окт 2019
Если вы вдруг ищете как удалить/отключить модуль vote в bitrix, то это делается в административном разделе: Настройки - Настройки продукта - Модули (/bitrix/admin/module_admin.php?lang=ru), там надо найти модуль "Опросы, голосования (vote)" и удалить его. Если вы не пользовались этим модулем (скорее всего это так), то сохранять таблицы и почтовые шаблоны не обязательно. Удалить файлы модуля можно тут: Контент - Структура сайта - Файлы и папки - bitrix - modules (/bitrix/admin/fileman_admin.php?lang=ru&path=%2Fbitrix%2Fmodules&site=s1), найдите папку vote и удалите. В модуле vote уязвимость нашли, поэтому много переходов из поисковых систем на эту страницу, хотя она немного о другом.
Если у Вас одна из старших редакций 1С-Битрикс, неизбежно будут модули и компоненты которые Вы не используете, но которые занимают место на хостинге, периодически обновляются и добавляются в бекапы, увеличивая время создания и вес архива.