+7 495 008 8452
  • Загрузка
Выберите ваш цвет

Архивирование и разархивирование средствами «Битрикс»

Если у вас возникли какие либо вопросы которые вы не смогли решить по нашим публикациям самостоятельно,
то ждем ваше обращение в нашей службе тех поддержки.

Администраторы «Битрикс» часто сталкиваются с необходимостью скачивать несколько файлов архивом либо распаковывать загруженный архив на сайте. В Панели управления есть для этого штатный функционал, но он требует ручного управления. Нельзя ли автоматизировать задачу? Можно:

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';
}



Готово!

Назад в раздел

Подписаться на новые материалы раздела:
Загрузка...