欢迎访问 生活随笔!

尊龙游戏旗舰厅官网

当前位置: 尊龙游戏旗舰厅官网 > 编程语言 > php >内容正文

php

php使用fputcsv进行大数据的导出 -尊龙游戏旗舰厅官网

发布时间:2025/1/21 php 36 豆豆
尊龙游戏旗舰厅官网 收集整理的这篇文章主要介绍了 php使用fputcsv进行大数据的导出 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

为了实验大数据的导出,我们这里先自已创建一张大表,表结构如下:

create table `tb_users` (`id` int(11) unsigned not null auto_increment comment '用户id',`name` varchar(32) default '' comment '用户名',`age` tinyint(3) default '0' comment '用户年龄',`desc` varchar(255) default '' comment '用户描述',`phone` varchar(11) default '' comment '用户手机',`qq` varchar(16) default '' comment '用户qq',`email` varchar(64) default '' comment '用户邮箱',`addr` varchar(255) default '' comment '用户地址',primary key (`id`) ) engine=innodb default charset=utf8;

 然后写个php脚本往这个表插入数据,代码如下:

connect_error) {die('connect error'); } //数据插入语句 $inssql = '';//一百万数据,分200步,每步插入5000条 $step = 200; $nums = 5000;for($s = 0; $s < $step; $s) {$inssql = 'insert into tb_users values';for($n = 0; $n < $nums; $n) {$name = newstring::randstring(3, 4);$age = mt_rand(1, 120);$desc = newstring::randstring(64, 4);$phone = newstring::randstring(11, 1);$qq = newstring::randstring(13, 1);$email = $qq . '@qq.com';$addr = newstring::randstring(128, 4);$inssql .= "(null, '{$name}', $age, '{$desc}', '{$phone}', '{$qq}', '{$email}', '{$addr}'),";}$inssql = rtrim($inssql, ',');$db->query($inssql); } $end = microtime(true); echo '用时:', $end - $begin;$db->close();

里面用到的tp3.2的string类大家自行上tp尊龙游戏旗舰厅官网下载。整个用时2个多小时,最后数据大小662m。

现在我们用php提供的fputcsv来导出这一百万的数据,原理就是打开一个标准输出流,然后把数据按一万条来分割,每一万条就刷新缓冲区。

connect_error) {die('connect error'); }//我们试着用fputcsv从数据库中导出1百万的数据 //我们每次取1万条数据,分100步来执行 //如果线上环境无法支持一次性读取1万条数据,可把$nums调小,$step相应增大。 $step = 100; $nums = 10000;//设置标题 $title = array('id', '用户名', '用户年龄', '用户描述', '用户手机', '用户qq', '用户邮箱', '用户地址'); foreach($title as $key => $item) {$title[$key] = iconv('utf-8', 'gbk', $item); } //将标题写到标准输出中 fputcsv($fp, $title);for($s = 1; $s <= $step; $s) {$start = ($s - 1) * $nums;$result = $db->query("select * from tb_users order by id limit {$start},{$nums}");if($result) {while($row = $result->fetch_assoc()) {foreach($row as $key => $item) {//这里必须转码,不然会乱码$row[$key] = iconv('utf-8', 'gbk', $item);}fputcsv($fp, $row);}$result->free();//每1万条数据就刷新缓冲区ob_flush();flush();} }$end = microtime(true); echo '用时:', $end - $begin;

整个过程用时5分钟,最终生成的csv文件大小420m。

 

对于如何用phpexcel导出大数据,并没有什么比较好的方案,phpexcel提供的一些缓存方法,数据压缩,虽然内存使用小了,但所用时间则加长了,时间换空间,显然并不是最好的方案。比较靠谱的方法还是生成多个下载链接地址,把你要下载的数据,以get形式传递当前页数,后台进行数据分页然后导出。

 比如你有一个查询数据表单,id为searchfrm,然后你想把导出数据按1万条分割(phpexcel一次导出1万条是没有问题的,效率还行)

姓名

总结

以上是尊龙游戏旗舰厅官网为你收集整理的php使用fputcsv进行大数据的导出的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得尊龙游戏旗舰厅官网网站内容还不错,欢迎将尊龙游戏旗舰厅官网推荐给好友。

网站地图