arcgis批量导出shp数据_Thinkphp5 分批批量导出百万条数据记录的Code,不用PHPEXCEL哦!...

通过phpexcel导出上万条数据,会延迟、内存溢出、程序报错,各种问题出现...届时作者放弃了phpexcel,导出小数据量还是很可行的。下面通过分批导出csv,并压缩至zip中提供下载...废话不说上代码...部分代码参考网上的哦~~~

245d290e3ae82b061b771e9e22bc9312.png

问题:通过phpexcel导出上万条数据,会延迟、内存溢出、程序报错,各种问题出现...届时作者放弃了phpexcel,导出小数据量还是很可行的。下面通过分批导出csv,并压缩至zip中提供下载...废话不说上代码...部分代码参考网上的哦~~~ fans_list 方法为作者自己封装的方法,可根据自己的情况来写,其实就是根据参数返回数据集而已。
/** * csv 批量导出 * @param $mpid * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\ModelNotFoundException * @throws \think\exception\DbException */public function export($mpid){    $wechat_mp_model = new WechatMp();    $limit = 50000;//每次只从数据库取50000条以防变量缓存太大    // buffer计数器    $cnt = 0;    $where['mpid'] = $mpid;    $mpName = $wechat_mp_model->getCustomField($where, 'mpname');    $start_time = $this->request->param('start_time', '');    $end_time = $this->request->param('end_time', '');    $args['start_time'] = $start_time;    $args['end_time'] = $end_time;    $xlsTitle = ['关注时间', '微信Openid', '微信昵称', '微信头像', '性别'];    set_time_limit(0);    $sqlCount = $this->get_fans_list($mpid, 0, $limit, $args, true);    $fileName = iconv('utf-8', 'gb2312', $mpName);//文件名称    $fileName = $fileName . date('_YmdHis');// 文件名称可根据自己情况设定    // 输出Excel文件头,可把user.csv换成你要的文件名    header('Content-Type: application/vnd.ms-excel;charset=utf-8');    header('Content-Disposition: attachment;filename="' . $fileName . '"');    header('Cache-Control: max-age=0');    $fileNameArr = array();    // 逐行取出数据,不浪费内存    for ($i = 0; $i < ceil($sqlCount / $limit); $i++) {         $fp = fopen($fileName . '_' . $i . '.csv', 'w'); //生成临时文件         // chmod('attack_ip_info_' . $i . '.csv',777);//修改可执行权限         $fileNameArr[] = $fileName . '_' . $i . '.csv'; // 将数据通过fputcsv写到文件句柄         fputcsv($fp, $xlsTitle);         $start = $i * $limit;         $dataArr = $this->get_fans_list($mpid, $start, $limit, $args);        foreach ($dataArr as $a) {            $cnt++;            if ($limit == $cnt) {                //刷新一下输出buffer,防止由于数据过多造成问题                ob_flush();                flush();                $cnt = 0;            }            fputcsv($fp, $a);        }        fclose($fp);  //每生成一个文件关闭    }    //进行多个文件压缩    $zip = new \ZipArchive();    $filename = $fileName . ".zip";    $zip->open($filename, $zip::CREATE);   //打开压缩包    foreach ($fileNameArr as $file) {        $zip->addFile($file, basename($file));   //向压缩包中添加文件    }    $zip->close();  //关闭压缩包    foreach ($fileNameArr as $file) {        unlink($file); //删除csv临时文件    }    $this->insertLog($this->admin_id, '', '导出公众号粉丝');    //输出压缩文件提供下载    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); //删除压缩包临时文件}
目前本机没有百万数据,也就30万条左右,导出没有任何问题,而且效率杠杠的。大家在使用过程中有更好的建议,欢迎留言!!  

cefb536b5cf699c52645da339c58b2a8.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值