我正在努力解决仅在很长时间运行的请求中出现的问题。我有一个Web应用程序,可以在XML文件中按需导出大量数据。根据数据,导出仅从几秒钟到几分钟。我用少量数据测试了导出,xml生成和文件下载运行良好。然后我用大量数据测试它,xml生成大约30分钟(由于大量的数据库查询)。 但是这个长时间运行的请求的问题是,在生成xml文件后,它不会下载,而是再次生成文件。在再次执行xml生成时,会收到网站加载错误。同样的情况发生在更多数据和xml生成时间超过一小时...... 那为什么会这样呢?仅对运行大约30分钟或更长时间的此类请求会出现此问题。是否有可能再次启动请求的超时?但是第二个文件生成在完成第一个文件之后开始,而不是在固定的持续时间之后开始。
答案 0 :(得分:2)
但第二个文件生成完全在完成第一个文件之后开始,而不是在固定的持续时间之后。
如果使用基于文件的会话,会话文件上的锁定将只允许一个正在运行的PHP脚本一次访问该文件,这可能会导致阻塞以及当前脚本完成后立即发生下一个请求的原因
对于大型导出,一种选择是以某种方式在后端处理“离线”并检查完成的文件。 例如:请求下载,立即获得“密钥”,并让php在后端生成导出。 然后,浏览器可以继续检查“密钥”的导出是否已完成,并在准备就绪时下载。允许用户开始导出,不用担心浏览器中途关闭或多次下载相同的导出而不重新生成。
或者,如果需要定期导出,只需从cron作业预处理它,这样最终用户就可以在需要时快速下载新数据而无需等待。