返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >PHP导出百万大数据【解决方案】
  • 533
分享到

PHP导出百万大数据【解决方案】

php开发语言 2023-09-01 18:09:29 533人浏览 泡泡鱼
摘要

最近开发项目,遇到一个问题,通常导出数据我们都会使用 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

猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作