У меня есть проект, в котором я хотел бы создать динамическую структуру дерева каталогов, не сохраняя его на сервере, сжимаю и выталкиваю его для загрузки. Можно ли сделать это?
Вероятно, вы ищете что-то вроде ZipArchive::addEmptyDir
, которое можно использовать для создания пустого каталога в ZIP-архиве. Позднее вы можете добавить файлы в этот каталог.
Вам все равно нужно сохранить полученный архив на диск …
$file = tempnam("tmp", "zip"); $zip = new ZipArchive(); $zip->open($file, ZIPARCHIVE::CREATE); $zip->addEmptyDir('newDirectory'); $zip->addFromString('newDirectory/demo.txt', 'file contents'); $zip->close(); // Stream the file to the client header('Content-Type: application/zip'); header('Content-Length: ' . filesize($file)); header('Content-Disposition: attachment; filename="some_archive_file.zip"'); readfile($file); unlink($file);
Если вы хотите передать архив без сохранения архива на своем конце, вы можете попробовать посмотреть класс PHPZip
Вы можете использовать passthru
с комбинацией утилит архивации командной строки, то есть:
passthru("tar dir0/ dir1/ dir2/dir23/dir234/ dir4/file4.txt | gzip -f");