Удаление ненужных компонентов Битрикс

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

Продолжаю чистить ядро от ненужного мне кода, на этот раз под нож попали стандартные компоненты

Продолжаю чистить ядро от ненужного мне кода, на этот раз под нож попали стандартные компоненты.

В прошлый раз удалял модули и это дало значительный результат.

Код ниже помещает компоненты с названием из массива $arUnlinkComponents в архив, после удаляет сами компоненты. Бездумно выполнять код нельзя. Перед выполнением сделайте резервную копию.

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

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

$arUnlinkComponents = array(
	'advertising.',
	'app.',
	'b24connector.',
	'bitrixcloud.',
	'bizproc.',
	'blog',
	'calendar.',
	'catalog',
	'currency.',
	'desktop',
	'eshop.',
	'event_list',
	'form',
	'forum',
	'furniture.',
	'highloadblock.',
	'idea',
	'im.',
	'infoportal.',
	'landing.',
	'learning.',
	'lists',
	'mail.',
	'map.',
	'messageservice.',
	'mobile.',
	'mobileapp.',
	'photo',
	'photogallery',
	'pull.',
	'report.',
	'rest.',
	'sale.',
	'security.',
	'sender.',
	'seo.',
	'socialnetwork',
	'spotlight',
	'statistic.',
	'stssync.',
	'support.',
	'webservice.',
	'wiki'
);

foreach (array("/local/components/bitrix", "/bitrix/components/bitrix") as $folder) {
	$handle = @opendir($_SERVER["DOCUMENT_ROOT"].$folder);
	if ($handle) {
		while (false !== ($dir = readdir($handle))) {
			if (!isset($arComponents[$dir]) && is_dir($_SERVER["DOCUMENT_ROOT"].$folder."/".$dir) && $dir != "." && $dir != "..") {
				foreach ($arUnlinkComponents as $name) {
					if (strpos($dir, $name) === 0) {
						$componentDir = $_SERVER["DOCUMENT_ROOT"].$folder."/".$dir;
						$arComponents[$dir]["COMPONENT_DIR"] = $componentDir;

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

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

$zip->close();

// Удаляем папку компонента
foreach ($arComponents as $arComponent) {
	if ($arComponent["COMPONENT_DIR"]) {
		$iterator = new RecursiveIteratorIterator(
			new RecursiveDirectoryIterator($arComponent["COMPONENT_DIR"]),
			RecursiveIteratorIterator::CHILD_FIRST
		);

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

Результаты:

  • Кол-во файлов на сайте уменьшилось с 48к до 32к
  • Размер бекапа уменьшился с 259Мб до 210Мб
  • Ошибок нет, система работает стабильно

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

Опубликовано 8 октября 2019 | Обновлено 8 мая 2020
чистка, готовый код
Поделиться
Похожие статьи
Удалить пользователей которые никогда не авторизовывались
Если через форму регистрации наспамило много новых пользователей, то таблицу хорошо бы почистить. Не...
Читать дальше » 0
Алексей,
Битрикс, удаление ненужных модулей
Если у Вас одна из старших редакций 1С-Битрикс, неизбежно будут модули и компоненты которые Вы не ис...
Читать дальше » 0
Алексей,
Комментарии
❮…❯
Авторизуйтесь чтобы получать уведомления об ответе
Продолжаю чистить ядро от ненужного мне кода, на этот раз под нож попали стандартные компоненты