我使用Maatwebsite
加载excel文件。我正在加载好几个文档,直到它发出下一个错误:
PHP Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 32 bytes) in /project1/vendor/phpoffice/phpexcel/Classes/PHPExcel/Cell.php on line 582
我前往config/excel.php
并将memoryCacheSize
设置更新为128MB
。完成后,我运行php artisan cache:clear
和php artisan config:cache
。再次尝试加载并返回相同的错误。
我该如何解决?
答案 0 :(得分:3)
在index.php文件中添加它。
ini_set('memory_limit', '-1');
答案 1 :(得分:3)
您必须增加PHP的内存限制。你有很多方法可以做到这一点。
首先,如果要检查创建PHP文件所需的实际内存限制(我们可以将其命名为php.php)或将其放在任何控制器内的操作中,并将以下代码放入其中:
<?php phpinfo(); exit;?>
更改memory_limit的第一种方法,这样修改在PHP中运行的所有proyects的momeoty_limit:
首先你需要找到你的php.ini,这个数据是在phpinfo();
编辑php.ini。搜索&#34; memory_limit&#34;在你的php.ini中,并更改它的值。如果没有&#34; memory_limit&#34;发现,在php.ini的末尾添加以下行 memory_limit = 128M; / *根据您的需要改变128M * / 保存文件。
重置apache。
sudo service apache2 restart
第二个选项是把它放在你的laravel proyect里面的index.php中,就像@Giri Annamalai M告诉你的那样。
ini_set('memory_limit', '-1');
此选项将修改所有proyect的内存限制...如果你输入-1,这意味着没有限制。(依赖于计算内存)
其他选项是指示控制器中的内存限制,在操作内指示内存限制:
ini_set('memory_limit', '-1');
请记住,-1总是无限制。也许这不是指示内存限制的最佳安全性和性能方式。你可以通过其他方式编辑内存,例如.htaccess ...但我认为第3种是这个世界中最好的之一。
答案 2 :(得分:1)
我建议使用盒子/喷口来放大文件。由于文件类型的灵活性,我使用了两者并且通常使用Maatwebsite来处理较小的文件。
答案 3 :(得分:0)
我做了一些调试,看看哪些场景会减少 Laravel Excel 的内存使用。
我在使用 DTO 时的最佳结果,它只包含简单的变量类型。 将 Carbon 或 BigDecimal 等对象转换为字符串也节省了一些内存使用量。
在导出中,您可以删除 withMapping
特征,因为 DTO 属性会为您执行此操作。如果需要,您可以更改 DTO 属性的顺序。
并删除 ShouldAutoSize
特征,as suggested by the maintainer
例如
class Row {
public int $id;
public string $created_at;
}
class UserExport implements FromCollection
{
public function collection()
{
$users = User::query()->all();
return $users->map(
function ($user) {
$row = new Row();
$row->id = $user->id;
// cast objects like Carbon or BigDecimal to string
$row->created_at = $entry->created_at->format('d-m-Y');
return $row;
}
);
}
}