php ZipArchive - 只添加文件而不是父文件夹

Posted

技术标签:

【中文标题】php ZipArchive - 只添加文件而不是父文件夹【英文标题】:php ZipArchive - adding only files not the parent folder 【发布时间】:2014-02-07 08:56:41 【问题描述】:

我正在用 php 创建一个 zip 存档,并希望在我的 pdfs_lib 文件夹中添加一些可用的 pdf 文件。我已经成功创建了存档,但存在一个问题,即在创建的 zip 存档中,文件被添加到 pdfs_lib 文件夹中,这不是我想要的。

我想将 pdfs_lib 文件夹中的 pdf 文件直接添加到存档中,而不是将这些文件添加到我创建的 zip 存档中的 pdfs_lib 文件夹中。

我试过的是:

    // 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 文件夹并解压缩这个新创建的文件夹中的所有文件。

关于如何在不添加 pdf_lib 文件夹的情况下创建 zip 存档的任何建议。

【问题讨论】:

【参考方案1】:

addFile 调用更改为:

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

第二个参数是'localname',压缩文件本身使用的名称。如果您在此处省略文件夹路径,它将被添加到 zipfile 的根目录中。

【讨论】:

【参考方案2】:

一个不作为的方面:如果档案(无论是 zip 或任何其他档案格式)解压缩到一个干净的文件夹中,而不是将所包含的文件到处乱扔,通常被认为是一种好的做法。

但是,如果您真的想在没有此类文件夹的情况下实现此功能,则必须重新编写代码。你有两种选择:

    您可以将执行 php 脚本的工作目录更改为保存文件的文件夹。在这种情况下,您不需要任何路径来将文件添加到 zip 存档,因此不会构建文件夹档案馆内。

    phps zip 扩展的addFile() 方法允许指定第二个(可选)参数,该参数允许传递传递文件的目标名称。

【讨论】:

以上是关于php ZipArchive - 只添加文件而不是父文件夹的主要内容,如果未能解决你的问题,请参考以下文章

PHP下载压缩包文件

php ZipArchive 压缩整个文件夹 - 自带ZipArchive类 - PHP递归创建目录压缩包

php ZipArchive 压缩整个文件夹 - 自带ZipArchive类 - PHP递归创建目录压缩包

PHP扩展类ZipArchive实现压缩解压Zip文件和文件打包下载 && Linux下的ZipArchive配置开启压缩

php ZipArchive压缩文件

如何在 php 7.4 上安装 ziparchive?