0

我正在努力解决仅在非常长时间运行的请求中出现的问题。我有一个 Web 应用程序,可以在 XML 文件中按需导出大量数据。根据数据,导出运行时间从一秒到几分钟不等。我用很少的数据测试了导出,xml 生成和文件下载运行良好。然后我用大量数据对其进行了测试,xml 生成运行了大约 30 分钟(由于大量数据库查询)。但是这个长时间运行的请求的问题是,在生成 xml 文件后,它不是下载而是再次生成文件。再次生成 xml 时,会出现站点加载错误。同样的情况发生在更多的数据和超过一小时的 xml 生成时间...... 那么为什么会这样呢?只有运行大约 30 分钟或更长时间的此类请求才会出现此问题。是否有可能有一些超时再次启动请求?但是第二个文件生成恰好在完成第一个文件之后开始,而不是在固定持续时间之后开始。

4

1 回答 1

2

但是第二个文件生成恰好在完成第一个文件之后开始,而不是在固定持续时间之后开始。

如果您使用基于文件的会话,会话文件上的锁定将只允许一个正在运行的 PHP 脚本一次访问该文件,这可能会导致阻塞以及当前脚本完成后立即发生下一个请求的原因。

对于大型导出,一种选择是以某种方式在后端处理“离线”并检查完成的文件。例如:请求下载,立即取回“密钥”,并让 php 在后端生成导出。然后,浏览器可以继续检查“key”的导出是否完成,并在准备好时下载它。允许用户开始导出,而不必担心浏览器中途关闭或多次下载相同的导出而不重新生成。

或者,如果需要定期导出,只需从 cron 作业对其进行预处理,这样最终用户就可以在需要时快速下载新数据而无需等待。

于 2013-10-10T11:08:38.747 回答