Php 将excel文件导入数据库时超时
我正在尝试使用基于PHPExcel的库将excel文件导入Laravel5.4上的MySQL数据库 我需要导入的文件相当大:至少有50k行,100列,我需要为每行创建一个数据库条目 我想我可能在导入过程中遇到了一些问题,所以我开始使用chunk,但是即使在1 chunk时,我也会收到以下错误消息: 超过了180秒的最大执行时间 我试图增加Php 将excel文件导入数据库时超时,php,excel,laravel,laravel-5,laravel-excel,Php,Excel,Laravel,Laravel 5,Laravel Excel,我正在尝试使用基于PHPExcel的库将excel文件导入Laravel5.4上的MySQL数据库 我需要导入的文件相当大:至少有50k行,100列,我需要为每行创建一个数据库条目 我想我可能在导入过程中遇到了一些问题,所以我开始使用chunk,但是即使在1 chunk时,我也会收到以下错误消息: 超过了180秒的最大执行时间 我试图增加max\u execution\u time变量和内存限制,但似乎仍然无法完成导入 这是我正在使用的代码: Excel::filter('chunk')->
max\u execution\u 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
]);
}
});
顺便说一句,我正在我的家园环境中进行本地测试。我需要一个也能在生产服务器上工作的解决方案。如果要仅为此脚本禁用超时,请使用:
set_time_limit(0)
…并监视您的进程以确保它不会挂起。甚至可以将它放在命令中,并使用$this->info()输出每次迭代的行号,以便知道它在文件中的位置
这样,您就可以覆盖任何可能阻碍您的.ini配置:)
如何运行此命令:从控制台还是通过web服务器?您何时更改了cli或apache的
max\u execution\u time
?我在apache服务器的php.ini文件中更改了max_execution_time。不过我不想进一步增加它——我需要模拟一个生产环境,以确保它能正常工作。而且你不想在php.ini中更改生产环境的任何设置。我说的对吗?是的,用更高的最大执行时间来保持良好的安全性将是一件非常痛苦的事情。你有没有看过Maatwebsite/laravel excel的“分块”选项,它允许你在多个加载中分割文件,每个加载不同的部分(“分块”)