php如何实现百万级数据快速导出CSV

醉折花枝作酒筹
发布: 2021-06-28 15:48:52
转载
3202人浏览过

在php中,可以使用了服务器的缓存来实现百万级数据快速导出csv,今天就带大家学习一下快速导出csv的方式,有需要的可以参考参考。

php如何实现百万级数据快速导出CSV

php实现百万级数据导出这里使用了服务器的缓存来实现

实现:

一:建立测试表,并加入测试数据

立即学习PHP免费学习笔记(深入)”;

1:创建测试表

这里我建了一个test表,字段分别为:id,name,age,email

2:加入测试数据

(1)首先手动向表中添加若干行数据

然后执行如下命令批量添加数据

INSERT INTO test (name,age,email) SELECT name,age,email FROM test;
登录后复制

多次执行上面的命令测试数据会呈指数增加,这样就可以得到很多测试数据

二:php实现导出百万级数据(这里我的查询命令使用的时Yii框架自带的查询命令)

//让程序一直运行
set_time_limit(0);
//设置程序运行内存
ini_set('memory_limit', '128M');
//导出文件名
$fileName = '测试导出数据';
header('Content-Encoding: UTF-8');
header("Content-type:application/vnd.ms-excel;charset=UTF-8");
header('Content-Disposition: attachment;filename="' . $fileName . '.csv"');
//打开php标准输出流
$fp = fopen('php://output', 'a');
//添加BOM头,以UTF8编码导出CSV文件,如果文件头未添加BOM头,打开会出现乱码。
fwrite($fp, chr(0xEF).chr(0xBB).chr(0xBF));
//添加导出标题
fputcsv($fp, ['姓名', '岁数', '邮箱']);
$nums = 10000; //每次导出数量
$count = Test::find()->count();
$step = ceil($count/$nums);//循环次数
for($i = 0; $i < $step; $i++) {
    $result = Test::find()
        ->select(['name', 'age', 'email'])
        ->limit($nums)
        ->offset($i * $nums)
        ->asArray()
        ->all();
    foreach ($result as $item) {
        fputcsv($fp, $item);
    }
    //每1万条数据就刷新缓冲区
    ob_flush();
    flush();
}
exit;
登录后复制

如上测试后可以发现导出一百万左右数据只需十几秒左右时间,效率还算是不错的

以上就是php如何实现百万级数据快速导出CSV的详细内容,更多请关注php中文网其它相关文章!

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
相关标签:
来源:segmentfault网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号