Если у вас возникли какие либо вопросы которые вы не смогли решить по нашим публикациям самостоятельно,
то ждем ваше обращение в нашей службе тех поддержки.
Администраторы «Битрикс» часто сталкиваются с необходимостью скачивать несколько файлов архивом либо распаковывать загруженный архив на сайте. В Панели управления есть для этого штатный функционал, но он требует ручного управления. Нельзя ли автоматизировать задачу? Можно:
1. Упаковка папки upload в zip - архив
Используем для этого класс CBXArchive
// Под архивируемые файлы выделяется директорияв /upload/tmp/
$sDirTmpName = randString(); // Имя временной папки
$sDirTmpPath = $_SERVER["DOCUMENT_ROOT"]."/upload/tmp/$sDirTmpName/"; // Серверный путь до временной папки
if(mkdir($sDirTmpPath)) { // Создание временной папки
foreach($arPackFiles as $k=>$sFileArcPath) { // Перебор всех файлов для архивирования
$arPackFiles[$k] = $sDirTmpPath.basename($sFileArcPath); // Новый путь архивируемого файла
copy($sFileArcPath, $arPackFiles[$k]); // И копирование во временную папку
}
// ... Создание архива из скопированных файлов
foreach($arPackFiles as $file) if(is_file($file)) unlink($file); // Удаление скопированных файлов
rmdir($sDirTmpPath); // Удаление временной папки
}
2. Распаковка загруженного файла
Используем для этого API «Битрикс»
// Архив
$sFilePathArc = $_SERVER["DOCUMENT_ROOT"]."/_import/webdata.zip";
// Директория для распаковки
$sFilePathDst = $_SERVER["DOCUMENT_ROOT"]."/_import/";
// Параметры распаковки
$arUnpackOptions = Array(
"REMOVE_PATH" => $_SERVER["DOCUMENT_ROOT"],
"UNPACK_REPLACE" => false
);
// Распаковка
$resArchiver = CBXArchive::GetArchive($sFilePathArc);
$resArchiver->SetOptions($arUnpackOptions);
$uRes = $resArchiver->Unpack($sFilePathDst);
// Вывод ошибки или результата
if (!$uRes) {
echo $resArchiver->GetErrors();
} else {
echo 'success';
}
Готово!
Назад в раздел
Подписаться на новые материалы раздела: