php ZipArchive - 仅添加不是父文件夹的文件

时间:2014-02-07 08:56:42

标签: php ziparchive

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

有关如何创建zip存档而不添加pdf_lib文件夹的任何建议。

2 个答案:

答案 0 :(得分:4)

addFile来电更改为:

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

第二个参数是'localname',即zipfile本身使用的名称。如果你在那里省略了文件夹路径,它将被添加到zipfile中的根目录。

答案 1 :(得分:1)

一方不是:如果存档(无论是zip还是其他任何存档格式)解压缩到一个干净的文件夹而不是乱丢整个地方包含的文件,通常认为这是一种好习惯。

但是如果你真的想在没有这样的文件夹的情况下实现它,那么你必须重新编写代码。您有两种选择:

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

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