我正在使用laravel并使用https://csv.thephpleague.com/来解析csv。
我的功能类似于
$path = $request->file('import_file')->getRealPath();
$csv = Reader::createFromPath($path, 'r');
$csv->setHeaderOffset(0);
$csv_header = $csv->getHeader();
$sample_data = $csv->fetchOne();
$sample_data = array_values($sample_data);
$records = $reader->getRecords();
$csv_file_id = Csv_data::create([
'csv_filename' => $request->file('import_file')->getClientOriginalName(),
'csv_header' => json_encode($csv_header),
'csv_data' => json_encode($records)
]);
如何通过处理执行时间限制来解析大型数据集。
嗯,我对这些事情都很陌生,所以我要求不要评论使用这个和那个。到目前为止,时间只是通过尝试这个和那个包。因此,使用代码片段的解决方案可能会更好。
我也试过了,
$stmt = (new Statement())
->offset($offset)
->limit($limit)
;
但没有成功。 !st甚至通过增加偏移来限制偏移和循环运行,它显示相同的执行时间错误。第二个原因,我很难以良好的逻辑结束循环。
寻求一些帮助。我将立即回复。
答案 0 :(得分:0)
您是否正在使用控制台命令? https://laravel.com/docs/5.6/artisan
如果在通过控制台进行内存限制时,可以先尝试增加php内存限制。
如果仍然不够,最后一个选项是将.csv切成部分。 但这不应该是必要的,除非你正在处理一个非常大的.csv(不太可能)。
答案 1 :(得分:0)
默认情况下,PHP通常设置为在超时之前执行HTTP请求30秒 - 以防止失控脚本或无限循环永远处理。听起来这就是你遇到的。
快速而简单的方法是在脚本顶部添加ini_set('max_execution_time', 300);
。这将告诉php在超时之前运行300秒(5分钟)。
您可以根据需要调整该时间,但如果它经常需要更长的时间,您可能需要查看其他选项 - 例如创建控制台命令(https://laravel.com/docs/5.6/artisan)或按计划运行它。