项目使用的是laravel5.1,使用的是laravel 推荐的excel类,Maatwebsite/Laravel-Excel,说起来只是导出6000行数据,我查了数据表才1.5mb,不知道为什么就无法导出,代码如下:
Excel::create('用户', function ($excel) use ($cellData) {
$excel->sheet('用户', function ($sheet) use ($cellData) {
foreach(array_chunk($cellData, 100) as $item){
$sheet->rows($item);
}
});
})->export('xlsx');
$cellData 是需要保存导入数据的数组,而且我开始以为是一次执行需要内存太大了,所以使用了array_chunk来分步导入,还是会报500错误,只有当数据量减少到1000行,就可以正常执行导入操作然后下载,请问大家有什么办法呢?
无法使用php.ini里的memory_limit,因为使用的是php-fpm,而它的最大内存设置为64m,报错信息:
PHP Fatal error: Allowed memory size of 67108864 bytes exhausted (tried to allocate 65536 bytes) in /project/xxx.com/vendor/composer/ClassLoader.php on line 444
请问大家有好的解决方案吗?
内存溢出了,laravel的话,我记得可以用游标控制内存,就是从数据库读取的时候。你的问题应该不是出现在导入到excel的时候,而是出现在从数据库拿出数据的时候。(补充:包括了你所有声明的变量,重复的赋值。这些空间复杂度)此时所有数据都是存储在内存中。laravel的游标(
cursor
)文档