梦想还是要有的, 万一实现了呢?

轻松解决PHPExcel导出文件行10W行超时和内存栈溢出

PHP 拈花古佛 7248℃ 0评论 繁體

本文使用了一个轻量级的PHP的Excel操作库-PHP_XLSXWriter

解决的问题

  • 10w行excel数据导出仅需要5.26秒,再也不用担心excel导出超过1w行就超时(php.ini中的max_execution_time)
  • 内存栈溢出,使用过PHPExcel的同学应该清楚,导出的文件行还没到1w行就报错了,原因是单个PHP进程超过了 php.ini配置的memory_limit
  • 解决了csv导出时样式丢失,长数字变成科学计数法的问题,乱码的问题

gitee.com/nodestudy/The

<?php

#使用轻量级的excel操作库PHP_XLSXWriter

$timeStart = microtime(true);

require_once __DIR__."/../PHP_XLSXWriter/vendor/autoload.php";


$writer = new XLSXWriter();

$sheetHeader = [

    '商品id'=>'string',

    '库存量'=>'string',

    '单价'=>'string',

    '名称'=>'string',

    '卖家联系电话'=>'string'//长数字再也不用担心会变成科学计数法了

];


$writer->writeSheetHeader('Sheet1',  $sheetHeader);//optional

for($i=0; $i<100000; $i++)

{

    $s1 = $i+1;

    $s2 = mt_rand(0,1000);

    $s3 = mt_rand(100,999)/10;

    $s4 = "商品".$s1;

    $s5 = "13713147601";//随便输入的

    $writer->writeSheetRow('Sheet1', array($s1, $s2, $s3, $s4, $s5) );

}

$writer->writeToFile('goods_info.xlsx');

echo floor((memory_get_peak_usage())/1024/1024)."MB";

echo "\n";

echo microtime(true) -$timeStart;

文件目录结构:

自动草稿

输入截图:

自动草稿

转载请注明:拈花古佛 » 轻松解决PHPExcel导出文件行10W行超时和内存栈溢出

喜欢 (0)or分享 (0)
发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址