最近做导出数据时发现PHPExcel超过3W数据执行脚本会内存溢出,虽然将ini_set("memory_limit",'1024M');调整到这么大,还是内存溢出,而且这种本来就是不合理的一种做法,后来在网上查的解决办法是在new \PHPExcel() 之前加上缓存,代码如下:
$cacheMethod = \PHPExcel_CachedObjectStorageFactory:: cache_to_phpTemp;
$cacheSettings = [' memoryCacheSize ' => '128MB'];
\PHPExcel_Settings::setCacheStorageMethod($cacheMethod, $cacheSettings);
但是执行没有什么效果,最后改成使用csv导出。
$head = ['ID','审核日期','关键词','标题', '描述','性别', '年龄', '回复'];
$filename = implode('|',$params);
unset($params);
$path = 文件存放目录;
if(!is_dir($path)){
mkdir($path,0777,true);//第三个参数如果为true则循环创建不存在的目录
}
$filePath = $path. $filename.'.csv';
$fp = fopen($filePath, 'w');//若csv文件不存在 则自动创建
fputcsv($fp, $head);
ob_start();
中间是循环查询数据将数据put到csv中
ob_flush();
flush();
fclose($fp);
经测试 使用csv 导出17W数据,使用227秒,文件大小共120M
使用PHPExcel 导出4W数据,报内存溢出