提问人:Paul Godard 提问时间:8/3/2023 最后编辑:hakrePaul Godard 更新时间:8/3/2023 访问量:58
Laravel PHP 创建空的新 zip 存档 [重复]
Laravel PHP create empty new zip archive [duplicate]
问:
我不明白为什么每次运行以下脚本时,zip 文件都会包含所有以前的文件。
每次运行脚本时,我都想从一个空存档开始。我该怎么做?
我尝试添加一个空文件夹,但这无济于事。
// open zip
$zip = new ZipArchive;
$zip->open($zipName, ZipArchive::CREATE);
// add pdfs to zip file
$zip->addEmptyDir('.'); // does not help
foreach($arPDFs as $thisPDF) {
if (File::exists(config('path')['scTemp'].$thisPDF)) {
$zip->addFile(config('path')['scTemp'].$thisPDF,$thisPDF);
}
}
// close zip
$zip->close();
// delete all pdfs
foreach($arPDFs as $thisPDF) {
if (File::exists(config('path')['scTemp'].$thisPDF)) {
File::delete(config('path')['scTemp'].$thisPDF);
}
}
// download zip file
header('Content-Type: application/zip');
header('Content-disposition: attachment; filename='.$zipName);
header('Content-Length: '.filesize($zipName));
readfile($zipName);
答:
1赞
Karl Hill
8/3/2023
#1
在创建新文件之前,您需要确保删除以前的 zip 文件。
use Illuminate\Support\Facades\File;
// Define the zip file name
$zipName = 'new_archive.zip';
// Check if the previous zip file exists and delete it
if (File::exists($zipName)) {
File::delete($zipName);
}
// Create a new zip archive
$zip = new ZipArchive;
$zip->open($zipName, ZipArchive::CREATE);
// Add pdfs to the zip file
foreach ($arPDFs as $thisPDF) {
if (File::exists(config('path')['scTemp'] . $thisPDF)) {
$zip->addFile(config('path')['scTemp'] . $thisPDF, $thisPDF);
}
}
// Close the zip archive
$zip->close();
// Download the zip file
header('Content-Type: application/zip');
header('Content-disposition: attachment; filename=' . $zipName);
header('Content-Length: ' . filesize($zipName));
readfile($zipName);
评论
0赞
Paul Godard
8/4/2023
谢谢!这确实非常合乎逻辑......
2赞
hakre
8/3/2023
#2
这就是 zip 的一般工作方式,如果文件已经存在,您可以修改它。除了 Karl Hill 的回答中概述的内容外,您还可以使用 ZipArchive::OVERWRITE 标志(文件名后面的第二个参数)打开 () 它。
$zip->open($zipName, ZipArchive::CREATE | ZipArchive::OVERWRITE)
|| throw new Error("Unable to open the Zip archive!");
这应该更好地反映您打开它的意图。
评论