最近开发项目,遇到一个问题,通常导出数据我们都会使用 PHPexcel 来导出数据,但是遇到大数据,这个方法就不行了。 例如:我的项目,3.5W个数据信息,需要导出做数据备份,使用【phpExcel】
最近开发项目,遇到一个问题,通常导出数据我们都会使用 PHPexcel 来导出数据,但是遇到大数据,这个方法就不行了。
例如:我的项目,3.5W个数据信息,需要导出做数据备份,使用【phpExcel】来导出就不行了,需要另谋它法:
不考虑PHPExcel就只能考虑导出CSV:
按照一定的数量,例如:5000条,导出CSV文件,多个CSV文件进行压缩为ZIP,最后导出ZIP里面就有所有数据。例如:3.5w条数据,最终有5个CSV文件,生成一个ZIP压缩文件。
代码如下:
public function exportCSV(){ $limit = 5000;//每次只从数据库取5000条以防变量缓存太大 // buffer计数器 $cnt = 0; $xlsTitle = ['序号','姓名','性别']; $sqlCount = 3000; // 这里需要查询出总条数 $fileName = iconv('utf-8', 'gb2312', 'students');//文件名称 $fileName = $fileName . date('_YmdHis');// 文件名称可根据自己情况设定 $zipname = 'zip-' . $fileName . ".zip"; // 输出Excel文件头,可把user.csv换成你要的文件名 header('Content-Type: application/vnd.ms-excel;charset=utf-8'); header('Content-Disposition: attachment;filename="' . $zipname . '"'); header('Cache-Control: max-age=0'); $fileNameArr = array(); // 逐行取出数据,不浪费内存 for ($i = 0; $i < ceil($sqlCount / $limit); $i++) { $fp = fopen($fileName . '_' . ($i+1) . '.csv', 'w'); //生成临时文件 // chmod('attack_ip_info_' . $i . '.csv',777);//修改可执行权限 $fileNameArr[] = $fileName . '_' . ($i+1) . '.csv'; // 将数据通过fputcsv写到文件句柄 fputcsv($fp, $xlsTitle); $start = $i * $limit; $dataArr = $this->model->getList($start,$limit); // 每次查询limit条数据 foreach ($dataArr as $a) { $cnt++; if ($limit == $cnt) { // 刷新一下输出buffer,防止由于数据过多造成问题 ob_flush(); flush(); $cnt = 0; } fputcsv($fp, $a); } fclose($fp); // 每生成一个文件关闭 } // 进行多个文件压缩 $zip = new \ZipArcHive(); $zip->open($zipname, $zip::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-Type: application/zip"); // zip格式 header("Content-Transfer-Encoding: binary"); header('Content-Length: ' . filesize($zipname)); @readfile($zipname); // 输出文件 unlink($zipname); // 删除压缩包临时文件}
感谢阅读~
留下个宝贵的关注和点赞吧!
来源地址:https://blog.csdn.net/qq_42342282/article/details/128674909
--结束END--
本文标题: PHP导出百万大数据【解决方案】
本文链接: https://lsjlt.com/news/389212.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0