Laravel 超时
TIMEOUT in Laravel
所以,我必须读取一个 excel 文件,其中每一行都包含一些我想写入数据库的数据。我将整个文件传递给 laravel,它读取文件并将其格式化为数组,然后我在我的数据库中进行新的插入(或更新)。
问题是,输入 excel 文件可能包含数千行并且需要一段时间才能完成,在某些情况下会出现 timeout error
。
当我尝试在本地进行此操作时,我使用 set_time_limit(0);
函数,因此不会发生超时,并且效果很好。但在远程服务器中,出于安全原因,此功能被禁用,并且我的代码因超时而崩溃。
有人可以帮助解决这个问题吗?也许关于如何更好地解决这个问题的另一个想法?
处理需要很长时间的任务的一个好方法是使用所谓的 jobs。
您可以创建一个名为 ImportExcel
的任务,当有人向您发送文件时,它会被命名为 dispatch
。
好好看看 docs,他们有一些很好的例子来说明如何做到这一点。
您可以使用以下步骤解决此问题:
1.获取csv文件,暂存于storage :
您可以在用户上传时存储大csv。如果它不是从前端上传的东西,请确保将其保存以供下一步处理。
2。然后调度一个可以排队的job :
您可以创建一个可以异步处理此问题的作业。您可以使用 Supervisor 来管理队列和超时等。
3。使用像 thephpleague 这样的包:
使用这个包(或类似包),您可以将记录分块或一次读取一个。将内存使用量限制在限制范围内真的很有帮助。此外,它还有不同的方法选项可用于从文件中读取数据。
4.处理文件后,您可以将其从临时存储中删除:
只是一些拆解清理 activity。
所以,我必须读取一个 excel 文件,其中每一行都包含一些我想写入数据库的数据。我将整个文件传递给 laravel,它读取文件并将其格式化为数组,然后我在我的数据库中进行新的插入(或更新)。
问题是,输入 excel 文件可能包含数千行并且需要一段时间才能完成,在某些情况下会出现 timeout error
。
当我尝试在本地进行此操作时,我使用 set_time_limit(0);
函数,因此不会发生超时,并且效果很好。但在远程服务器中,出于安全原因,此功能被禁用,并且我的代码因超时而崩溃。
有人可以帮助解决这个问题吗?也许关于如何更好地解决这个问题的另一个想法?
处理需要很长时间的任务的一个好方法是使用所谓的 jobs。
您可以创建一个名为 ImportExcel
的任务,当有人向您发送文件时,它会被命名为 dispatch
。
好好看看 docs,他们有一些很好的例子来说明如何做到这一点。
您可以使用以下步骤解决此问题:
1.获取csv文件,暂存于storage :
您可以在用户上传时存储大csv。如果它不是从前端上传的东西,请确保将其保存以供下一步处理。
2。然后调度一个可以排队的job :
您可以创建一个可以异步处理此问题的作业。您可以使用 Supervisor 来管理队列和超时等。
3。使用像 thephpleague 这样的包:
使用这个包(或类似包),您可以将记录分块或一次读取一个。将内存使用量限制在限制范围内真的很有帮助。此外,它还有不同的方法选项可用于从文件中读取数据。
4.处理文件后,您可以将其从临时存储中删除:
只是一些拆解清理 activity。