По поводу UPD2...т.е чтобы скрыть путь до файлов нужно такую жуть мутить? Формируем массив путей к архивируемым файлам как у вас в примере (массив $arPackFiles), а далее 2 функции и никаких "созданий копий" не нужно. Найдено тут http://pastebin.com/h8zubtLz.
**Вторая функция сразу отдает сформированный архив на скачивание
Ваш код разумный но подход к решению задачи не понравился. Сама идея того, что нужно создавать копии файлов и временную директорию, только для того, чтобы их скрыть из архива - абсурдна. Снизу ещё один листинг в копилку.
/** * @param $arFiles - массив id файлов bitrix * @param $fileName - название создаваемого архива */ function createZip($arFiles,$fileName){ $zipFileName = "/upload/$fileName.zip";
/*удалить файл если-создан*/ if (file_exists($_SERVER["DOCUMENT_ROOT"].$zipFileName)) { unlink($_SERVER["DOCUMENT_ROOT"].$zipFileName); }
// Массив со списком путей, до архивируемых файлов foreach($arFiles as $iFileID) { $arPackFiles[] = $_SERVER["DOCUMENT_ROOT"].CFile::GetPath($iFileID); }
// Архивирование в zip $zip = new ZipArchive(); //Создаём объект для работы с ZIP-архивами $zip->open($_SERVER['DOCUMENT_ROOT'].$zipFileName, ZIPARCHIVE::CREATE); //Открываем (создаём) архив archive.zip foreach($arPackFiles as $key=> $file){ $zip->addFile($file,basename($file)); //Добавляем в архив файл } $zip->close(); //Завершаем работу с архивом return $zipFileName; }
Группы на сайте создаются не только сотрудниками «1С-Битрикс», но и партнерами компании. Поэтому мнения участников групп могут не совпадать с позицией компании «1С-Битрикс».