将excel文件导入数据库时​​超时

时间:2017-06-05 21:46:56

标签: php excel laravel laravel-5 laravel-excel

我正在尝试使用基于PHPExcel的http://www.mkyong.com/java/how-to-convert-java-object-to-from-json-jackson/库将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环境中进行本地测试。我需要一个可以在生产服务器上运行的解决方案。

1 个答案:

答案 0 :(得分:0)

如果要为此脚本禁用超时,请使用:

set_time_limit(0)

...并监控您的流程以确保它不会挂起。甚至可以将它放入一个命令并使用$ this-> info()输出每次迭代的行号,这样你就可以知道它在文件中的位置。

这样你就可以覆盖任何可能阻碍你的.ini配置:)

http://php.net/manual/en/function.set-time-limit.php