牛骨文教育服务平台(让学习变的简单)
博文笔记

PHP打包下载zip文件

创建时间:2017-05-11 投稿人: 浏览次数:157
//download to ZIP
$filename = str_replace("\", "/", public_path()) . "/downloads_xml/" . date("YmdHis") . ".zip"; // 最终生成的文件名(含路径)
// 生成文件
$zip = new ZipArchive (); // 使用本类,linux需开启zlib,windows需取消php_zip.dll前的注释
if ($zip->open($filename, ZIPARCHIVE::CREATE) !== TRUE) {
    exit ("无法打开文件,或者文件创建失败");
}
$list = image::where("event_id", $id)->where("user_id", Auth::user()->id)->with("author")->get();
foreach ($list as $key => $value) {
    $fingerprint = explode(".", $value->fingerprint)[0];
    $zip->addFile(str_replace("\", "/", public_path()) . "/downloads_xml/" . $fingerprint . ".xml", basename($fingerprint . " --" . ($key+1) . ".xml")); // 第二个参数是放在压缩包中的文件名称,如果文件可能会有重复,就需要注意一下
}
$zip->close(); // 关闭
//下面是输出下载;
header("Cache-Control: max-age=0");
header("Content-Description: File Transfer");
header("Content-disposition: attachment; filename=" . basename($filename)); // 文件名
header("Content-Type: application/zip"); // zip格式的
header("Content-Transfer-Encoding: binary"); // 告诉浏览器,这是二进制文件
header("Content-Length: " . filesize($filename)); // 告诉浏览器,文件大小
@readfile($filename);//输出文件;
这虽然是在laravel下做的(记得use ZipArchive),但是步骤什么的都一样,希望对大家有所帮助。
需要下载其他格式更改Content-Type即可,具体请参考http://tool.oschina.net/commons  里面有详解
要想增加别的内容压缩,只需复制$zip->addFile这一行代码即可。

            
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。