将文件添加到 ZIP 存档的子文件夹?

Posted

技术标签:

【中文标题】将文件添加到 ZIP 存档的子文件夹?【英文标题】:Add file to sub-folder to ZIP archive? 【发布时间】:2016-08-30 07:05:36 【问题描述】:

我想将带有文件的子文件夹添加到存档中。

$files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($source), RecursiveIteratorIterator::SELF_FIRST);

我不能使用它,因为我不需要文件夹中的所有文件。 我有一些关于文件的信息的数组:

$paths = [
[
    'name' => 'file',
    'ext'  => 'txt',
    'path' => '/folder/'
],
[
    'name' => 'subFolder',
    'ext'  => 'folder',
    'path' => '/folder/'
],
[
    'name' => 'fileInSubFolder',
    'ext'  => 'txt',
    'path' => '/folder/subFolder/'
]
];

在循环中我这样做:

if( $folder[$i]['ext'] == 'folder' )
    $zip->addEmptyDir($fileName);
else 
    $zip->addFromString( $fileName.$fileExt, file_get_contents($fileFullPath.$fileExt));

如果是“文件夹”,那么我在存档中创建空文件夹,否则将文件添加到存档。 但是如果文件位于子文件夹中,那么文件将添加到存档的根目录。 而且,如何将文件添加到新的空子文件夹? 或者如何更改当前目录以添加文件?

【问题讨论】:

【参考方案1】:

你不用ZipArchive“改变目录”你总是在添加文件时传递绝对文件路径。

现在,我不知道为什么你有一个 $paths 数组,但是你循环通过 $folders 因为我看不到你的所有代码,但是如果你循环通过你的 $paths 数组,你会想要将您存储的绝对路径附加到文件名的前面。

$paths = [
[
    'name' => 'file',
    'ext'  => 'txt',
    'path' => '/folder/'
],
[
    'name' => 'subFolder',
    'ext'  => 'folder',
    'path' => '/folder/'
],
[
    'name' => 'fileInSubFolder',
    'ext'  => 'txt',
    'path' => '/folder/subFolder/'
]
];


if( $paths[$i]['ext'] == 'folder' ) 
    $zip->addEmptyDir($fileName);
 else 
    // This would create "/folder/subFolder/fileInSubFolder.txt"
    $fullFileName= $paths[$i]['path'] . $paths[$i]['name'] . "." . $paths[$i]['ext'];
    $zip->addFromString( $fullFileName, /* File Data Here */);

【讨论】:

谢谢!我只是困惑。我认为“addFromString”中的第一个参数只是文件名,但需要放置相对路径,从要存档的文件夹开始。非常感谢!

以上是关于将文件添加到 ZIP 存档的子文件夹?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 perl Archive::Zip 将文件添加到存档中?

将文件添加到存档时不要修改文件的编辑日期

有没有办法将文件夹添加到现有的 7za 存档中?

Git存档将未版本控制的文件添加到子目录

使用 powershell 和 7zip 创建存档的脚本

使用 php 将文件添加到 rar 存档