【发布时间】:2017-06-05 21:46:56
【问题描述】:
我正在尝试使用基于 PHPExcel 的 Maatwebsite/laravel-excel 库将 excel 文件导入我在 Laravel 5.4 上的 MySQL 数据库。
我需要导入的文件非常大:至少 50k 行 100 列,我需要为每一行创建一个数据库条目。
我认为我可能在导入过程中遇到了一些问题,所以我开始使用块,但是即使是 1 个块,我也会收到以下错误消息:
最长执行时间超过 180 秒。
我尝试增加 max_execution_time 变量和内存限制,但我似乎仍然无法完成导入。
这是我正在使用的代码:
Excel::filter('chunk')->load($request->file('source_file')->getRealPath())->chunk(1,function ($results) {
foreach($results as $row) {
TaskMeta::create([
'task_id' => $row['task_id'],
'col2' => $row['column2'],
... etc, rest of the 100 columns ommited for clarity
]);
}
});
顺便说一句,我正在我的 Homestead 环境中进行本地测试。我需要一个同样适用于生产服务器的解决方案。
【问题讨论】:
-
如何运行此命令:从控制台还是通过 Web 服务器?你什么时候为cli或apache更改
max_execution_time?谢谢。 -
我在我的 apache 服务器的 php.ini 文件中更改了 max_execution_time。不过我不想进一步增加它 - 我需要模拟生产环境以确保它能够正常工作。
-
而且您不想更改 php.ini 中生产环境的任何设置。我说的对吗?
-
是的,用更长的最大执行时间来维持良好的安全性将是一个巨大的痛苦。
-
你有没有看过 Maatwebsite/laravel-excel 的“分块”选项,它允许你将文件拆分为多个加载,每个加载不同的部分(“块”)
标签: php excel laravel laravel-5 laravel-excel