Php 最大执行时间备选方案
下面是真相: 我为之开发的客户端位于HostGator上,它将其最大执行时间限制为30秒,无法覆盖(我已尝试并确认无法通过他们的支持和wiki实现) 我让代码做的是获取一个上传的文件并…Php 最大执行时间备选方案,php,for-loop,timeout,execution-time,php-ini,Php,For Loop,Timeout,Execution Time,Php Ini,下面是真相: 我为之开发的客户端位于HostGator上,它将其最大执行时间限制为30秒,无法覆盖(我已尝试并确认无法通过他们的支持和wiki实现) 我让代码做的是获取一个上传的文件并… 循环遍历xml 获取文件中的所有提要下载链接 下载每个xml文件 分别循环遍历每个文件的每个xml数组,并根据每个项目的来源(即文件名)将其信息插入数据库 现在有没有什么方法可以让我以某种方式将其排队,或者可能将工作负载拆分为多个文件?我知道代码工作得很完美,在插入前会检查每一项是否存在,但我一直无法绕过执行限
如果您有任何建议,请告诉我 您知道可以通过注册关机处理程序来欺骗
最大执行时间吗?在该代码中,您可以再运行30秒;-)
好的,现在来点更有用的
您可以在数据库中添加一个小队列表,以跟踪您所在的位置,以防脚本中途终止
- 获得所有下载链接后,将它们添加到表中
- 然后下载一个文件并进行处理;完成后,将它们从队列中签出(从中删除)
- 每次运行时,您都要检查队列中是否还有剩余的工作
为了让它工作,您需要多次请求该URL;也许可以使用JavaScript继续重新加载,直到工作完成?您知道可以通过注册关机处理程序来欺骗最大执行时间吗?在该代码中,您可以再运行30秒;-)
好的,现在来点更有用的
您可以在数据库中添加一个小队列表,以跟踪您所在的位置,以防脚本中途终止
- 获得所有下载链接后,将它们添加到表中
- 然后下载一个文件并进行处理;完成后,将它们从队列中签出(从中删除)
- 每次运行时,您都要检查队列中是否还有剩余的工作
为了让它工作,您需要多次请求该URL;也许可以使用JavaScript继续重新加载,直到工作完成?只有在通过Web服务器执行PHP脚本时,时间限制才有效,如果您从CLI或作为后台进程执行脚本,它应该可以正常工作
请注意,如果您不够小心,执行外部脚本有点危险,但这是一个有效的选项
检查以下资源:
具体来说:
只有在通过Web服务器执行PHP脚本时,时间限制才有效,如果您从CLI或作为后台进程执行脚本,它应该可以正常工作
请注意,如果您不够小心,执行外部脚本有点危险,但这是一个有效的选项
检查以下资源:
具体来说:
我正处于这种情况。我的方法与杰克的相似
- 接受执行时间限制就在那里
- 设计应用程序以应对突然退出(查看
寄存器\关闭\功能
)
- 确定流程中所有需要时间的部分
- 持续保存流程的进度
- 修改组件,使其能够从任意点开始,例如XML文件中的某个位置,或继续下载要获取的XML链接列表
对于任务我做了两个模块,导入用于实际处理;用于处理这些任务的任务管理。
对于调用TaskManager,我使用CRON,现在这取决于webhosting提供了什么,如果足够的话。还有一个网络摄像机
Jack的JavaScript方法的优点是,它只在需要时添加请求。如果没有要执行的任务,脚本运行时将非常短,可能被夸大了*,但仍然是。缺点是它需要用户一直等待,而不是关闭选项卡/浏览器、JS支持等。
*)在这种情况下,可能比一个用户点击一次要求要低得多
然后当然要研究性能改进、缓存、跳过不需要/没有改变的内容等。我正处于这种情况。我的方法与杰克的相似
- 接受执行时间限制就在那里
- 设计应用程序以应对突然退出(查看
寄存器\关闭\功能
)
- 确定流程中所有需要时间的部分
- 持续保存流程的进度
- 修改组件,使其能够从任意点开始,例如XML文件中的某个位置,或继续下载要获取的XML链接列表
对于任务我做了两个模块,导入用于实际处理;用于处理这些任务的任务管理。
对于调用TaskManager,我使用CRON,现在这取决于webhosting提供了什么,如果足够的话。还有一个网络摄像机
Jack的JavaScript方法的优点是,它只在需要时添加请求。如果没有要执行的任务,脚本运行时将非常短,可能被夸大了*,但仍然是。缺点是它需要用户一直等待,而不是关闭选项卡/浏览器、JS支持等。
*)在这种情况下,可能比一个用户点击一次要求要低得多
然后当然要研究性能改进、缓存、跳过不需要/未更改的内容等。不幸的是,主机禁用了上述所有功能=\不幸的是,主机已禁用上述所有功能=\尽管如此,处理每个父提要的大量xml文件并对其进行处理仍需要30秒以上的时间