public function csv(){
set_time_limit(0);
$sqlCount = DB::table('users')->count();//数据总数
$head = ['用户名','父级id','邀请码','注册时间'] //表格头部信息
$limit = 10000;//每张表格多少数据,一万条已经是极限了
$fileNameArr = array();//设置一个所有表格的数组
$mark = '用户数据';//每张表单的名称
for ($i = 1; $i < ceil($sqlCount / $limit)+1; $i++) {
$fp = fopen($mark . '_' . $i . '.csv', 'w'); //生成临时文件
$fileNameArr[] = $mark . '_' . $i . '.csv';//生成文件
// 将数据通过fputcsv写到文件句柄
fputcsv($fp, $head);//把头部信息写进表格
$page = $i;//for循环每页取一万条数据
$dataArr = DB::table('users')->orderBy('id','desc')
->paginate($limit, ['*'], 'page', $page);
$dataArr = $dataArr->items();
foreach ($dataArr as $a) {
$array=array(//$a 是一个集合 需要转成数组。
$a->account_number,
$a->parent_id,
$a->extension_code,
date('Y-m-d H:i:s',$a->time),
}
fputcsv($fp, $array);//讲生成的数组放进文件内
}
fclose($fp); //每生成一个文件关闭
//讲生成的文件压缩成zip格式
$zip = new ZipArchive();
$filename = $mark . ".zip";
$zip->open($filename, ZipArchive::CREATE); //打开压缩包
foreach ($fileNameArr as $file) {
$zip->addFile($file, basename($file)); //向压缩包中添加文件
}
$zip->close(); //关闭压缩包
foreach ($fileNameArr as $file) {
unlink($file); //删除csv临时文件
}
//输出压缩文件提供下载
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);//输出文件;
unlink($filename); //删除压缩包临时文件
}