- 坑一:不要单独用ZipArchive::CREATE模式,因为ZipArchive::CREATE模式会往aaa.zip中追加内容(测试过会将原文件所在的目录都拉进来压缩); ZipArchive::OVERWRITE的模式是 ,当目标文件已经存在时,程序会生成一个新的同名文件覆盖原来的文件,但是,当这个文件不存在时,ZipArchive::open()将返回数字9;结论:同时使用ZipArchive::OVERWRITE和ZipArchive::CREATE;
- 坑二:addFile的第一个参数一定要是绝对路径(保证能通过该路径找到相应的文件); 第二个参数就是你保存到压缩文件的 文件名称;
$paths = ['aaa.pdf','aaa.jpg];
$zipname = 'aaa.zip';
$zip = new \ZipArchive(); //引用 类
//$zip->open($zipname,\ZipArchive::OVERWRITE); //如果文件存在,则用这个模式就够了,如果需要创建文件 则要结合用2个一起;
$res = $zip->open($zipname, \ZipArchive::OVERWRITE|\ZipArchive::CREATE); //坑一
if ($res === TRUE) {
foreach ($paths as $val) {
$file_info_arr= pathinfo($val);
$filename =$file_info_arr['basename'];
$zip->addFile($val, $filename);
}
$zip->close();
header("Content-Type: application/zip");
header("Content-Transfer-Encoding: Binary");
header("Content-Length: " . filesize($zipname));
header("Content-Disposition: attachment; filename=\"" . basename($zipname) . "\"");
readfile($zipname);
exit;
}