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);以上就是本文的全部内容,希望对大家的学习有所帮助