您好,欢迎访问一九零五行业门户网

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

在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的详细内容。
其它类似信息

推荐信息