Php 是否将文件添加到子文件夹以压缩存档?

Php 是否将文件添加到子文件夹以压缩存档?,php,archive,ziparchive,Php,Archive,Ziparchive,我想将包含文件的子文件夹添加到存档 $files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($source), RecursiveIteratorIterator::SELF_FIRST); 我不能使用它,因为我不需要文件夹中的所有文件。 我有一些关于文件的信息: $paths = [ [ 'name' => 'file', 'ext' => 'txt', 'path' =

我想将包含文件的子文件夹添加到存档

$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));
若为“文件夹”,则我在存档中创建空文件夹,否则将文件添加到存档中。 但若文件位于子文件夹中,那个么该文件将添加到存档的根目录中。 如何将文件添加到新的空子文件夹中? 或者如何更改当前目录以添加文件?

添加文件时,您不必“更改目录”,而是始终传递绝对文件路径

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

$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 */);
}
添加文件时,您不会“更改目录”,而是始终传递绝对文件路径

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

$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”中的第一个参数只是文件名,但需要放置相对路径,从要归档的文件夹开始。非常感谢你!非常感谢。我只是糊涂了。我认为“addFromString”中的第一个参数只是文件名,但需要放置相对路径,从要归档的文件夹开始。非常感谢你!