聊聊php百万数据怎么写入csv
更新:2023-01-02 08:21:37
人气:519
来源:互联网转载
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 参数计当前查询的总数,超过百万再加新文件。
推荐的文章
随手记
- ● 自制(IP或域名)可信任的SSL证书,适用360、chrome等浏览器
- ● 绿联UGREENKVM切换器(分屏器)快捷键丢失解决办法
- ● 统信UOS开机指定网址全屏启动自带浏览器以及屏蔽ALT+F4关闭
- ● xshellSSH连接Linux服务器防止超时退出
- ● php8开启OpenSSL扩展库报错disabledinstallext
- ● 统信系统linux安装php时的报错libxml-2.0>=2.7.6
- ● tidb关闭sql_mode=ONLY_FULL_GROUP_BY模式
- ● windows10如何开机自动运行bat文件
- ● Win10Mysql8初始密码丢失,初始化又不显示密码
- ● UOS系统关闭防火墙或者放行tcp80端口
PHP经验分享
- ● PHP批量对TCP服务端指定多个IP非阻塞检查在线状态
- ● python实现TCP服务端持续接收关机、重启指令并输出结果【系列三】
- ● PHP给TCP服务端发送指令【系列二】
- ● PHP判断TCP服务端是否在线【系列一】
- ● PHP判断远程文件是否存在
- ● LINUX下用PHP获取CPU型号、内存占用、硬盘占用等信息代码
- ● PHP代码用UDP方式远程唤醒电脑让计算机开机
- ● apache下php生成验证码图片不能显示
- ● PHP使用AES加密解密示例(无偏移)
- ● Pluginmysql_native_passwordreported:''mysql_native_password'isdeprecate问题