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

时间:2016-08-30 07:05:36

标签: php archive ziparchive

我想添加带文件的子文件夹进行存档。

$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 个答案:

答案 0 :(得分:0)

你没有"改变目录"使用ZipArchive时,您总是在添加文件时传递绝对文件路径。

现在,我不确定为什么你有一个clear $instances = (Get-Service | Where-Object {$_.Name -like 'MSSQL$*'}).DisplayName $machine_name = [System.Net.Dns]::GetHostName() foreach ($inst in $instances) { $serv = $machine_name+"\"+$inst.Substring($inst.IndexOf("(")+1).Replace(")","") $conn=new-object System.Data.SqlClient.SQLConnection $ConnectionString = "Server="+$serv+";Database=MyDB;Integrated Security=True;Connect Timeout=0" $conn.ConnectionString=$ConnectionString $conn.Open() $commandText = "CREATE PROC Get_Jobs_Inventory_Detail AS SELECT j.name AS [Job Name],j.[description], j.date_created, j.date_modified, case j.[enabled] WHEN 0 THEN 'Disable' WHEN 1 THEN 'Enable' END AS [Job Status] FROM msdb.dbo.sysjobs j GROUP BY j.name, j.[description], j.date_created, j.date_modified,j.[enabled] ORDER BY j.[enabled];" $command = $conn.CreateCommand() $command.CommandText = $commandText #$command.ExecuteNonQuery() $command.ExecuteScalar() $conn.Close() } 数组,但是你循环遍历$paths因为我看不到你的所有代码,但是如果你循环遍历$folders 1}}数组你想要将你存储的绝对路径附加到文件名的前面。

$paths