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

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如何实现百万级数据快速导出CSV
—–文章转载自PHP中文网如有侵权请联系ymkuzhan@126.com删除
转载请注明来源:php如何实现百万级数据快速导出CSV
本文永久链接地址:https://www.ymkuzhan.com/30248.html
本文永久链接地址:https://www.ymkuzhan.com/30248.html
下载声明:
本站资源如无特殊说明默认解压密码为www.ymkuzhan.com建议使用WinRAR解压; 本站资源来源于用户分享、互换、购买以及网络收集等渠道,本站不提供任何技术服务及有偿服务,资源仅提供给大家学习研究请勿作它用。 赞助本站仅为维持服务器日常运行并非购买程序及源码费用因此不提供任何技术支持,如果你喜欢该程序,请购买正版! 版权声明:
下载本站资源学习研究的默认同意本站【版权声明】若本站提供的资源侵犯到你的权益,请提交版权证明文件至邮箱ymkuzhan#126.com(将#替换为@)站长将会在三个工作日内为您删除。 免责声明:
您好,本站所有资源(包括但不限于:源码、素材、工具、字体、图像、模板等)均为用户分享、互换、购买以及网络收集而来,并未取得原始权利人授权,因此禁止一切商用行为,仅可用于个人研究学习使用。请务必于下载后24小时内彻底删除,一切因下载人使用所引起的法律相关责任,包括但不限于:侵权,索赔,法律责任,刑事责任等相关责任,全部由下载人/使用人,全部承担。以上说明,一经发布视为您已全部阅读,理解、同意以上内容,如对以上内容持有异议,请勿下载,谢谢配合!支持正版,人人有责,如不慎对您的合法权益构成侵犯,请联系我们对相应内容进行删除,谢谢!


