Excel数据太大,无法解析。执行超时

时间:2018-04-25 15:51:49

标签: php laravel phpexcel

我正在使用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甚至通过增加偏移来限制偏移和循环运行,它显示相同的执行时间错误。第二个原因,我很难以良好的逻辑结束循环。

寻求一些帮助。我将立即回复。

2 个答案:

答案 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)或按计划运行它。