php实现百万级数据快速导出CSV的方法

发布时间:2021-06-28 16:16:17 作者:chen
来源:亿速云 阅读:431

这篇文章主要讲解了“php实现百万级数据快速导出CSV的方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“php实现百万级数据快速导出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的方法这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!

推荐阅读:
  1. PHP导出CSV案列
  2. 解决mongodb导出数据csv乱码的方法

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

php

上一篇:适用于协程客户端和PHP协议解析的是什么

下一篇:如何用python获取网盘数据

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》