聊聊php百万数据怎么写入csv
需求:
百万数据写入 csv。
框架:
N 多年前老框架,百度都搜不到了,所以写法趋近原生
分析:
数据量过大,不能用浏览器请求写入 csv 下载,所以写个脚本调取
伪代码:
//xxx - 根据自己项目替换 //调取脚本文件 exec(xxx); //脚本文件 //设置执行时间和内存 set_time_limit(0); ini_set('memory_limit', '128M'); //循环获取 $id = 0; $data = 'xxx'.'\n';//表头 while(true){ //SQL $list = xxx WHERE id > $id ORDER BY id ASC LIMIT 10000; //每次取1w防止数据库压力大,根据sql来,我这个有联表, if(empty($list)){ break; } foreach($list as $row){ $data .= '"' . $row['xxx'] . '",'; $data .= "\n"; $id = $row['id'];//更新最大id } //追加写入csv file_put_contents('xxx', mb_convert_encoding($data, 'gbk'),FILE_APPEND); unset($data);//基础不好不确定初始化能不能清内存就先unset了 $data = '';//初始化 }
本质上就是分批写入,刚开始试验的时候是打算不把 file_put_contents 写在循环里的,后来发现数据量大的时候,几十万数据 $data 内存就超了另外如果超百万数据的话需要做分文件导出,excel 不支持打开超过 1048576 行,理论上就是加个 $all_count 参数计当前查询的总数,超过百万再加新文件。
相关内容
这些是最新的
热门排行
- THINKPHP5+GatewayWorker+Workerman 开发在线客服系统
- 在手机浏览器网页中点击链接跳转到微信界面的方法
- 尊云网站目录系统 ThinkPHP5网站分类目录程序 v2.2.221011
- CentOS 7安装shadowsock(一键安装脚本)
- AdminTemplate 基于LayUI 2.4.5实现的网站后台管理模板
- 用NW.js(node-webkit)开发多平台的桌面客户端
- PHP生成随机昵称/用户名
- THINKPHP5网站分类目录程序 尊云网站目录系统
- 织梦(DEDECMS)微信支付接口 微信插件
- 基于LayUI开发的 网站后台管理模板 BeginnerAdmin
- 响应式后台网站模板 - AMA.ADMIN
- layuiAdmin后台管理模板 Iframe版
- LayUI 1.0.9 升级 至 LayUI 2.1.4 方法
- 简洁清爽的会员中心模板
- jQuery幸运大转盘抽奖活动代码