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 ZipArchive 压缩整个文件夹 - 自带ZipArchive类 - PHP递归创建目录压缩包
php ZipArchive 压缩整个文件夹 - 自带ZipArchive类 - PHP递归创建目录压缩包
PHP扩展类ZipArchive实现压缩解压Zip文件和文件打包下载 && Linux下的ZipArchive配置开启压缩