【发布时间】:2010-02-05 00:08:51
【问题描述】:
是否有 Zend Framework 方法来保存 3 个文件中的内容(无论是动态生成的还是实际存在的)并强制下载为文件?
类似于这个问题(尽管尝试了几种不同的方法,但到目前为止从控制器内部运行时它对我不起作用):
【问题讨论】:
标签: zend-framework zip
是否有 Zend Framework 方法来保存 3 个文件中的内容(无论是动态生成的还是实际存在的)并强制下载为文件?
类似于这个问题(尽管尝试了几种不同的方法,但到目前为止从控制器内部运行时它对我不起作用):
【问题讨论】:
标签: zend-framework zip
您可以像这样使用 PHP ZIP 库(您需要预先安装该库):
$zip = new ZipArchive();
if($zip->open($filename, ZIPARCHIVE::CREATE | ZIPARCHIVE::OVERWRITE) !== true){
throw new Exception('Could not create zip file ' . $filename);
die('zip fail');
}else{
$zip->addFile($file1Uri, 'file1.txt');
$zip->addFile($file2Uri, 'file2.txt');
}
$zip->close();
if(file_exists($filename)){
return true;
}else{
throw new Exception('Could not create zip file ' . $filename);
}
提供 ZIP 文件:
protected function _deliver($file, $name, $extension, $size, $mime){
header('Pragma: private');
header("Expires: -1");
header('Last-Modified: '.gmdate('D, d M Y H:i:s') . ' GMT');
header("Cache-Control: no-cache");
header("Content-Transfer-Encoding: binary");
header("Content-Type: " . $mime);
header("Content-Description: File Transfer");
header('Content-Disposition: attachment; filename="' . $name . '.' . $extension . '"');
header("Content-Length: " . $size);
set_time_limit(0);
if(!readfile($file)){
return false;
}
}
【讨论】:
答案是对您的另一个问题的赞成票。从控制器执行此操作,然后在输出 zip 数据后调用 exit,因此不要渲染视图。
【讨论】: