需求:
【资料图】
百万数据写入 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 参数计当前查询的总数,超过百万再加新文件。
如果有更好的方法,或者代码优化部分欢迎讨论。
推荐学习:《PHP视频教程》
以上就是聊聊php百万数据怎么写入csv的详细内容,更多请关注php中文网其它相关文章!