php ZipArchive - добавление только файлов, а не родительской папки

Я создаю zip-архив в php и хочу добавить несколько pdf-файлов, доступных в моей папке pdfs_lib. Я успешно создал архив, но есть проблема, заключающаяся в том, что внутри созданного zip-архива файлы добавляются в папку pdfs_lib, а это не то, что я хочу.

Я хочу добавить pdf-файлы, находящиеся в папке pdfs_lib, непосредственно в архив, а не добавлять эти файлы в папку pdfs_lib в моем созданном zip-архиве.

Что я пробовал:

    // Create Zip File
    $zip = new ZipArchive;
    $res = $zip->open("pdfs_lib/my_zip_archive.zip", ZipArchive::CREATE);
    if ($res === TRUE)
    {
        // Add pdf file to zip archive
        $zip->addFile("pdfs_lib/pdf_file_1.pdf");
        $zip->addFile("pdfs_lib/pdf_file_2.pdf");

        $zip->close();
        echo 'ok';
    } else {
        echo 'failed';
    }

Этот код успешно создает zip-архив, но когда я распаковываю архив, он создает папку pdfs_lib и распаковывает все файлы внутри этой вновь созданной папки.

Любое предложение о том, как создать zip-архив без добавления в него папки pdf_lib.


person Sheikh Rahat Ali    schedule 07.02.2014    source источник


Ответы (2)


Измените вызовы addFile на:

$zip->addFile("pdfs_lib/pdf_file_1.pdf", "pdf_file_1.pdf");

Второй параметр — это «localname», имя, используемое в самом zip-файле. Если вы не укажете там путь к папке, он будет добавлен в корень zip-файла.

person stephangroen    schedule 07.02.2014

Сторона не как внутрь: обычно считается хорошей практикой, если архив (будь то zip или любой другой формат архива) распаковывается в чистую папку вместо того, чтобы засорять содержащиеся файлы повсюду.

Однако, если вы действительно хотите реализовать это без такой папки, вы должны переработать свой код. У вас есть две альтернативы:

  1. вы можете изменить рабочий каталог, в котором выполняется ваш php-скрипт, на ту папку, в которой вы храните файлы. В этом случае вам не нужен какой-либо путь для добавления файлов в zip-архив, поэтому внутри архива не создается папка.

  2. метод addFile() расширения phps zip позволяет указать второй (необязательный) аргумент, который позволяет передать целевое имя переданного файла.

person arkascha    schedule 07.02.2014