关于php生成多个文件并且打包成压缩文件进行下载
/**
生成多个txt文件 打包下载压缩文件
$data数据
*/
function download_txt(array $data){
//每100000生成一个文件
$count=100000;
$list=array_chunk($data,$count);
$file=[];
//生成多个文件 并且写入文件中
for ($i=0;$i<count($list);$i++){
$content='';
$file[$i]=ROOT_PATH.'/public/export/'."_".date("Y-m-d")."_".$i.".txt";
//创建文件
$myfile=fopen( $file[$i],'w+');
foreach($list[$i] as $k=>$v){
$v['Title']=str_replace([PHP_EOL," ","\n","\r","\t"],"",$v['Title']);
fwrite($myfile,implode("\t",$v).PHP_EOL);
unset($list[$i][$k]);
}
fclose($myfile);
}
//大于5.3php版本 好像是自带的类
$zip=new \ZipArchive();
//压缩文件地址
$filename = ROOT_PATH . "/public/export/" .date("Ymd").'.zip';
//halt($zip->open($filename, \ZIPARCHIVE::CREATE)===TRUE);
if($zip->open($filename, \ZIPARCHIVE::CREATE)===TRUE) {
foreach ($file as $v){
//addFile如果第一个参数含有路径,那么就需要第二个参数用于去掉压缩路径,如果是文件名不需要
$zip->addFile($v,basename($v));
}
$zip->close(); //关闭处理的zip文件
}
//用于标记那些需要删除的文件
array_unshift($file,$filename);
if(!file_exists($filename)){
exit("无法找到文件"); //可能创建失败
}
header("Cache-Control: public");
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)); //告诉浏览器,文件大小
//下面两句代码比较重要 如果没有 下载的压缩文件会提示损坏
ob_clean();
flush();
@readfile($filename);
//循环删除
foreach ($file as $k){
unlink($k);
}
}