Битрикс, удаление ненужных модулей
Если у Вас одна из старших редакций 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Мб
- Ошибок нет, система работает стабильно
Вывод: нужно удалять неиспользуемые компоненты, но в другой раз :)
Есть вопросы или нашли ошибку? Напишите комментарий (можно без регистрации), отвечать стараюсь быстро.