1

看起来像添加

取消链接($文件名);

到底部似乎可以解决它:

==================================================== ====================

所以我想做的是从 2 个字符串创建一个 zip 文件,然后发送一些标题,告诉浏览器打开一个“另存为”对话框并下载 zip 文件。

它工作正常,但是当用户单击下载链接时,zip 文件的副本被复制到 php 脚本所在的 php 文件夹的根目录中,此时弹出“另存为”对话框。有人知道为什么会这样吗?我认为问题可能出在标题中。我只想在用户指定的位置保存 1 个副本。

$string1 = "Some data Some data Some data Some data Some data Some data";
$string2 = "Some data Some data Some data Some data Some data Some data";

$filename = "test.zip";

$zip = new ZipArchive();

if ($zip->open($filename, ZIPARCHIVE::CREATE)!==TRUE) {
   exit("cannot open <$filename>\n");
}


$zip->addFromString("string1.html", $string1);
$zip->addFromString("string2.html", $string2);


$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");

clearstatcache();

header("Content-Length: ".filesize($filename));
readfile($filename);


?> 
4

2 回答 2

1

嗯,就是open($filename, ZIPARCHIVE::CREATE)这样......我会这样做:

->open($tempfile = tempnam(sys_get_temp_dir(),'yourzip_'), ZIPARCHIVE::CREATE)
 ....
 header("Content-Disposition: attachment; filename=\"".$filename."\"");
 ...
 header("Content-Length: ".filesize($tempfile));
 readfile($tempfile);
 unlink($tempfile);

请注意,您的“test.zip”文件名只需要在标题中,您可以随意调用临时文件。

于 2013-03-08T00:03:25.900 回答
0

我认为只要您调用该文件,该文件就会保存在您的服务器上$zip->open()

我对 ZipArchive 的工作方式不是很熟悉,但如果它要求您调用该open()方法才能工作,您可以尝试使用php://memory此问题中描述的协议:

字符串到 php 中的压缩流

注意:以上链接仅与如何使用php://memory协议有关。

于 2013-03-08T00:06:00.100 回答