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();
}
Пожалуйста, не возражайте против потенциальных опечаток в именах переменных, я переписал их и комментарий на английском языке, чтобы сделать их более читаемыми. Если я запустил код как есть, он удалит файлы и каталоги, но не создаст архив. Я проверил проверки на возвращаемые значения и addEmptyDir
, addFile
, unlink
и rmdir
все работает нормально. Однако, кажется, что удаление файлов препятствует правильному закрытию архива, и, следовательно, файл не создается.Удаление файлов после их добавления в архив запрещает создание архива
Я обходил его, сдвинув unlink
и rmdir
звонков после$zip->close()
, поэтому файлы будут удалены только после того, как архив создаются. Тем не менее, я заставляю меня иметь двойные петли, и из того, что я собрал, рассматривая вопросы, связанные с документацией и почтой, здесь не должно быть никаких проблем с отключением, как я. Кто-нибудь знает, по какой причине это может случиться?
Поэтому код показан/с учетом других вопросов, например [ссылка ] (http://stackoverflow.com/questions/4914750/how-to-zip-a-whole-folder-using-php) ошибочно, так как они отсоединяются перед закрытием? Я попробовал немного меньше, чем дюжину вопросов, прежде чем спрашивать, и все они вставляют свою цепочку * внутри * цикла, поэтому я решил, что моя проблема - это что-то еще. – David
Да, кажется так .. Забавно, что ответ, который вы связали, получил 16+ :) – hek2mgl