欢迎您来到,李雷博客 | PHP博客        登录  |  注册

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

更新:2023-01-02 08:21:37
人气:337
来源:互联网转载
A+

需求:

百万数据写入 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 参数计当前查询的总数,超过百万再加新文件。

推荐的文章
# 发表我的评论
  /     /  
# 最近评论
暂时还没有评论,要不要说点什么?
  Ads by Google
  联系博主
Hello,本博客系统采用PHP和MySql开发,程序开发完全是因为个人爱好,是自己纯手写PHP源代码,未采用任何PHP框架!
QQ:858353007   微信号:lileihot123
网站地图
会员服务
关于我们
QQ:858353007
 
广告服务
加我微信
移动端访问
 
 
Copyright © 2014- 2024 www.mdaima.com All Rights Reserved.
李雷博客,专注PHP经验、PHP教程及PHP源代码开源下载分享的PHP博客!   ICP备案号:京ICP备10202169号-4