Laravel中的超时

时间:2019-02-21 20:07:11

标签: mysql excel laravel timeout

因此,我必须读取一个Excel文件,其中的每一行都包含一些我想写入数据库的数据。我将整个文件传递给laravel,它读取文件并将其格式化为数组,然后在数据库中进行新的插入(或更新)。 事实是,输入的excel文件可以包含数千行,并且要花一些时间才能完成,在某些情况下会给出timeout error。 当我尝试在本地进行此操作时,我使用set_time_limit(0);函数,因此不会发生超时,并且效果很好。但是出于安全原因,在远程服务器中禁用了此功能,并且我的代码由于超时而崩溃。 有人可以帮助解决这个问题吗?也许是另一个如何更好地解决此问题的想法?

2 个答案:

答案 0 :(得分:1)

处理耗时的任务的一种好方法是利用所谓的jobs

当有人向您发送文件时,您可以进行名为ImportExceldispatch的工作。

看看docs,他们有一些很好的例子。

答案 1 :(得分:0)

您可以按照以下步骤进行操作:

1。提取csv文件并将其临时存储在存储中:

您可以在用户上传时存储较大的csv。如果不是从前端上传的内容,请确保已保存以供下一步处理。

2。然后调度job,该队列可以排队:

您可以创建一个可以异步处理的作业。您可以使用Supervisor来管理队列和超时等。

3。使用thephpleague之类的软件包:

使用此程序包(或类似程序包),您可以对记录进行分块或一次读取一个。将内存使用量限制在一定范围内确实很有帮助。此外,它还有多种方法可供选择,可以从文件中读取数据。

4。处理完文件后,您可以将其从临时存储中删除:

只需进行一些拆解清理活动。