聊聊php百万数据怎么写入csv

后端开发   发布日期:2023年05月28日   浏览次数:551

需求:

百万数据写入 csv。

框架:

N 多年前老框架,百度都搜不到了,所以写法趋近原生

分析:

数据量过大,不能用浏览器请求写入 csv 下载,所以写个脚本调取

伪代码:

  1. //xxx - 根据自己项目替换
  2. //调取脚本文件
  3. exec(xxx);
  4. //脚本文件
  5. //设置执行时间和内存
  6. set_time_limit(0);
  7. ini_set('memory_limit', '128M');
  8. //循环获取
  9. $id = 0;
  10. $data = 'xxx'.'\n';//表头
  11. while(true){
  12. //SQL
  13. $list = xxx WHERE id > $id ORDER BY id ASC LIMIT 10000; //每次取1w防止数据库压力大,根据sql来,我这个有联表,
  14. if(empty($list)){
  15. break;
  16. }
  17. foreach($list as $row){
  18. $data .= '"' . $row['xxx'] . '",';
  19. $data .= "\n";
  20. $id = $row['id'];//更新最大id
  21. }
  22. //追加写入csv
  23. file_put_contents('xxx', mb_convert_encoding($data, 'gbk'),FILE_APPEND);
  24. unset($data);//基础不好不确定初始化能不能清内存就先unset了
  25. $data = '';//初始化
  26. }

本质上就是分批写入,刚开始试验的时候是打算不把 file_put_contents 写在循环里的,后来发现数据量大的时候,几十万数据 $data 内存就超了另外如果超百万数据的话需要做分文件导出,excel 不支持打开超过 1048576 行,理论上就是加个 $all_count 参数计当前查询的总数,超过百万再加新文件。

以上就是聊聊php百万数据怎么写入csv的详细内容,更多关于聊聊php百万数据怎么写入csv的资料请关注九品源码其它相关文章!