php 实现多个文件打包成zip压缩包下载的函数
PHP ZipArchive是PHP自带的扩展类,可以轻松实现ZIP文件的压缩和解压,
使用前首先要确保PHP ZIP扩展已经开启,不同的平台开启PHP扩增的方法网上都有。
/** * 把文件打包后下载 * @param array $fromFiles 要打包的文件 * @param string $toZipName 保存的文件名 * @param bool $returnUrl true返回路径 false 直接下载 * @return array */ function downloadFiles($fromFiles, $toZipName, $returnUrl) { if (!file_exists($toZipName)) { $zip = new ZipArchive(); if ($zip->open($toZipName, ZipArchive::CREATE) == TRUE) { foreach ($fromFiles as $val) { if (file_exists($val)) { $zip->addFile($val, basename($val)); } } $zip->close(); } } if (!file_exists($toZipName)) { return array('msg' => '打包不成功'); } // 成功后是否删除源文件 foreach ($fromFiles as $val) { @unlink($val); } // 返回路径 还是直接下载 if ($returnUrl) { return array('msg' => '打包成功', 'zipUrl' => $toZipName); } else { header("Cache-Control: public"); header("Content-Description: File Transfer"); header('Content-disposition: attachment; filename=' . basename($toZipName)); //文件名 header("Content-Type: application/zip"); //zip格式的 header("Content-Transfer-Encoding: binary"); //告诉浏览器,这是二进制文件 header('Content-Length: ' . filesize($toZipName)); //告诉浏览器,文件大小 @readfile($toZipName); } }
调用方法:
$fromFiles = array('tmp/abc.jpg', 'tmp/abc.zip', 'tmp/abc.txt'); $toZipName = 'tmp/newZip.zip'; $returnUrl = true; $rs = downloadFiles($fromFiles, $toZipName, $returnUrl);
以上就是本文的全部内容,希望对大家的学习有所帮助