当前位置: 首页 > 后端技术 > PHP

PHP导出超大CSV格式Excel表格方案

时间:2023-03-29 16:56:36 PHP

场景和痛点说明我们的工作场景经常会导出相关的excel数据,有时候需要的数据量很大,10W,100W都有可能。我们现有的解决方案都是直接操作phpexcel等类库,phpexcel加载加载或者写导入导出都会遇到超时内存和时间限制的问题。即使我们的ini_set还是不是最好的方案,我们还是用php输出csv,依次输出数据,然后输出到输出终端(浏览器访问就是浏览器输出)写流程指令的关键是注释代码在代码中$v){$column_name[$i]=iconv('utf-8','GBK',$v);}//写通过fputcsv将标题名称添加到文件句柄fputcsv($fp,$column_name);$export_data=[];for($i=0;$i<10;$i++){foreach(range(1,100000)as$k=>$v){$export_data[]=["XXX".$v,"XXX"。$v,"XXX"。$v,"XXX"。$v,"XXX"。$v,"XXX"。$v,"XXX"。$v,"XXX"。$v,"XXX"。foreach($export_dataas$item){$rows=数组();foreach($itemas$export_obj){$rows[]=iconv('utf-8','GBK',$export_obj);}fputcsv($fp,$rows);}$export_data=[];//重新复制,释放旧数据}fclose($fp);$endTime=microtime(true);$memoryUse=memory_get_usage();file_put_contents("11.log","内存使用情况:".convert($memoryUse).";时间:".($endTime-$startTime).PHP_EOL,8);退出(0);结果测试,我们模拟数据,输入100万(10000*10)条数据日志记录内存占用#文件大小:84.7MB(88,889,540字节)#这里用到的时间是因为业务模拟,所以具体要看操作业务数据,可能会更长,内存占用是一样的。内存使用:118.99kb;花费时间:74.375253915787