十万条数据导出至csv文件

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); //删除压缩包临时文件
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值