if ($zip->open($zipFile, ZipArchive::CREATE) !== TRUE) {
(...)
} else {
$zip->addFile($tempDir.$fileName.".xls", $fileName.".xls");
// The array contains the directory structure of the files to add
foreach ($list_attachments as $dir_name => $attachment_files) {
if (!empty($attachment_files)) {
$zip->addEmptyDir($dir_name);
foreach ($attachment_files as $attachment) {
$zip->addFile($tempDir.$dir_name."/".$attachment, $dir_name."/".$attachment));
unlink($tempDir.$dir_name."/".$attachment);
}
rmdir($tempDir.$dir_name."/");
}
}
$zip->close();
}
Run Code Online (Sandbox Code Playgroud)
请不要介意变量名称中可能存在的拼写错误,我用英语重写了它们和注释,以使它们更具可读性。如果我按原样运行代码,它将删除文件和目录,但不会创建存档。我对返回值和addEmptyDir、addFile、进行了检查,unlink并且rmdir一切正常。但是,删除文件似乎会阻止存档正确关闭,因此不会创建文件。
我通过将unlink和rmdir调用移到后来$zip->close()规避它,因此文件仅在创建存档后才会被删除。然而,这迫使我有两次循环,从我收集的文档和与 zip 相关的问题来看,像我一样取消链接不应该有任何问题。有谁知道这可能发生的原因是什么?