你错过了最重要的部分 – 输出文件! 🙂
加:
readfile('test.zip');
到php文件的末尾.
此外,HTTP内容长度标头的计算是错误的:
header("Content-Length: ".filesize($zip));
这将使您始终为0(或false),因为filesize期望文件名作为其参数.
将行更改为:
header("Content-Length: ".filesize('test.zip'));
执行这两个操作后,zip将成功下载并包含两个文件.对于completenes,这里有完整的工作示例:
$string1 = 'Some data some data some data';
$string2 = 'Some data some data some data';
$zip = new ZipArchive();
$filename = "test.zip";
if ($zip->open($filename, ZIPARCHIVE::CREATE)!==TRUE) {
exit("cannot open \n");
}
$zip->addFromString("string1.txt", $string1);
$zip->addFromString("string2.txt", $string1);
$zip->close();
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: public");
header("Content-Description: File Transfer");
header("Content-type: application/octet-stream");
header("Content-Disposition: attachment; filename=\"".$filename."\"");
header("Content-Transfer-Encoding: binary");
// make sure the file size isn't cached
clearstatcache();
header("Content-Length: ".filesize('test.zip'));
// output the file
readfile('test.zip');