使用csv的方式替代phpExcel导出上万条记录
- 8172
- PHP
- 5
- super_dodo
- 2014/01/15
在做一些数据操作的时候,常常需要使用到phpExcel这个工具,当数据量大的时候,就需要优化phpExcel
$cacheMethod = PHPExcel_CachedObjectStorageFactory::cache_in_memory; //设置缓存 PHPExcel_Settings::setCacheStorageMethod($cacheMethod); //可以尝试着使用phpExcel的缓存模式 set_time_limit(0); //执行时间改为最大,避免超时 ini_set('memory_limit', '256M'); //加大内存限制
若对phpExcel的性能优化还是无法达到预期,可以使用csv,关于处理csv和Excel的效率参考.
在不做任何优化和结构修改的情况下,csv的性能远远高于phpExcel,尤其对于大数据的情况.对于字段比较长的上万条记录phpExcel很多时候难以导出来,即便能导出来也需要好多分钟。
简单的一个800条的数据有10多个字段的情况下,导出phpExcel需要2分多钟的时间,使用csv则20秒导出来.所以对于大数据的话,当phpExcel不能支撑和优化的时候请试着使用csv,虽然界面没有Excel好控制,但是不得已而为之.
//这个数据从数据库去查询查询之后对需要获取的值组装成为数组 $excelData = array( array('M001','实体机','北京','3#1','...'), array('M011','宿主机','上海','3#2','...'), array('M111','虚拟机','深圳','3#3','...'), ); $csvStr = ''; //用于组装CSV的格式 $filename = "查询并导出数据.csv"; $keys = array("机器编号","机器类型","所属机房","所在机柜","....."); //字段标题 array_unshift($excelData,$keys); //把关键字(表头)插入数组的最前面 foreach ($excelData as $kk => $vv) { foreach ($vv as $k => $v) { $cv = iconv('utf-8', 'gbk', $v); //csv居然需要转换成为gbk编码,否则会乱码,(疑惑..) // if($k == '2'){$cv = "'".$cv; } //若需要对特殊的值进行自定义处理... $csvStr .= $cv.','; } $csvStr .= "\n"; } header("Content-type:text/csv"); header("Content-Disposition:attachment;filename=".$filename); header('Cache-Control:must-revalidate,post-check=0,pre-check=0'); header('Expires:0'); header('Pragma:public'); echo $csvStr; exit();
每一个不曾起舞的日子,都是对生命的辜负.
相关阅读
- 通过Google API客户端访问Google Play帐户报告PHP库
- PHP执行文件的压缩和解压缩方法
- 消息中间件MQ与RabbitMQ面试题
- 如何搭建一个拖垮公司的技术架构?
- Yii2中ElasticSearch的使用示例
热门文章
- 通过Google API客户端访问Google Play帐户报告PHP库
- PHP执行文件的压缩和解压缩方法
- 消息中间件MQ与RabbitMQ面试题
- 如何搭建一个拖垮公司的技术架构?
- Yii2中ElasticSearch的使用示例
最新文章
- 通过Google API客户端访问Google Play帐户报告PHP库
- PHP执行文件的压缩和解压缩方法
- 消息中间件MQ与RabbitMQ面试题
- 如何搭建一个拖垮公司的技术架构?
- Yii2中ElasticSearch的使用示例