Запаковка Zip-архивов штатными средствами

Небольшой скрипт,позволяющий получить zip-архив:
// Массив со списком путей, до архивируемых файлов
$arFiles = Array(74768, 74770);
foreach($arFiles as $iFileID) {
   $arPackFiles[] = $_SERVER["DOCUMENT_ROOT"].CFile::GetPath($iFileID);
}

// Архивирование в zip
$packarc = CBXArchive::GetArchive($_SERVER["DOCUMENT_ROOT"]."/tmp.zip");
$pRes = $packarc->Pack($arPackFiles);

Как распаковать zip-архив я писал ранее, но принцип аналогичный. 

UPD: 
Что бы в результирующем архиве исключить путь до папки upload можно написать так:
...
$packarc->SetOptions(Array(
   "REMOVE_PATH" => $_SERVER["DOCUMENT_ROOT"]."/upload/",
));

$pRes = $packarc->Pack($arPackFiles);

UPD2: 
Если нужно полностью исключить любые директории, то, похоже, придется копировать их во временную папку. Примерно так:
// Под архивируемые файлы выделяется директорияв /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);                                       // Удаление временной папки
}